DP de cuatro dimensiones "Pregunta diaria"

Training Team Training⑧ - Juez virtual

El significado del título: una matriz, el peso máximo y "dos caminos" de arriba a la izquierda a abajo a la derecha

Puede abrir una matriz de cuatro dimensiones porque la cantidad de datos es demasiado pequeña

Iterar a través de cada caso y encontrar los puntos que no se repiten

#include <iostream>

using namespace std;
int n;
int a[15][15];
int dp[15][15][15][15];
int main() {
	cin>>n;
	int x,y,val;
	while(scanf("%d",&x)!=EOF){
		if(x==0) break;
		cin>>y>>val;
		a[x][y]=val;
	}
//	int k,z;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			for(int k=1;k<=n;k++){
				for(int m=1;m<=n;m++){
					dp[i][j][k][m] = max(dp[i-1][j][k-1][m],dp[i][j-1][k][m-1]) + a[i][j];
					dp[i][j][k][m] = max(dp[i][j][k][m],dp[i-1][j][k][m-1] + a[i][j]);
					dp[i][j][k][m] = max(dp[i][j][k][m],dp[i][j-1][k-1][m] + a[i][j]);
					if(i!=k&&j!=m) dp[i][j][k][m]+=a[k][m];
				}
			}
		}
	}
	cout<<dp[n][n][n][n]<<endl;
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_60789461/article/details/123390547
Recomendado
Clasificación