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;
}