题意:一个矩阵,从左上走到右下的最大权重和「两条路」
可以开一个四维数组,因为数据量太小了
对每种情况都进行遍历,然后找不重复的点
#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;
}