本人为动规新手,请各位大佬多多指教
#include<iostream>
using namespace std;
const int N = 2000;
int map[10][10];
int a,b,c;
int n,dp[20][20][20][20];
int main()
{
cin>>n;
while(1)
{
cin>>a>>b>>c;
if(a==0&&b==0&&c==0)
{
break;
}
else
{
map[a][b]=c;
}
}
dp[0][0][0][0]=map[0][0];
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=n;j++)
{
for(int x=1;x<=n;x++)
{
for(int y = 1;y<=n;y++)
{
if(i!=1&&x!=1) dp[i][j][x][y]=max(dp[i][j][x][y],dp[i-1][j][x-1][y]+map[i][j]+map[x][y]-map[i][j]*(i==x&&j==y));
if(i!=1&&y!=1) dp[i][j][x][y]=max(dp[i][j][x][y],dp[i-1][j][x][y-1]+map[i][j]+map[x][y]-map[i][j]*(i==x&&j==y));
if(j!=1&&x!=1) dp[i][j][x][y]=max(dp[i][j][x][y],dp[i][j-1][x-1][y]+map[i][j]+map[x][y]-map[i][j]*(i==x&&j==y));
if(j!=1&&y!=1) dp[i][j][x][y]=max(dp[i][j][x][y],dp[i][j-1][x][y-1]+map[i][j]+map[x][y]-map[i][j]*(i==x&&j==y));
}
}
}
}
cout<<dp[n][n][n][n];
return 0;
}