#include<iostream>
using namespace std;
int n,a[15][15],dp[15][15][15][15];
int main(){
cin>>n;
int x,y,z;
while(cin>>x>>y>>z){
if(x==0&&y==0&&y==0) break;
a[x][y]=z;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++){
for(int l=1;l<=n;l++){
dp[i][j][k][l]=max(dp[i-1][j][k-1][l],max(dp[i-1][j][k][l-1],max(dp[i][j-1][k-1][l],dp[i][j-1][k][l-1])))+a[i][j]+a[k][l];
if(i==k&&j==l) dp[i][j][k][l]-=a[i][j];
}
}
}
}
cout<<dp[n][n][n][n]<<endl;
return 0;
}
luoguP1004方格取数题解
最新推荐文章于 2024-06-15 16:17:24 发布
本文详细描述了一个使用C++编写的程序,通过动态规划方法求解给定二维数组中从左上角到右下角的最大路径和,排除路径上的重复元素。
摘要由CSDN通过智能技术生成