看到这个范围
就知道非dp 莫属了
看成两个人一起走
**开一个四维数组f[i][j][k][l]代表第一个人走到ij第二个人走到kl时的最大值,
答案在f[n][n][n][n]的位置**
思路
1
找出上一个时间点的最大值
2
加上现在的位置的值
3
如果两个人的位置不同再加上另一个人的位置的值
#include<iostream>
#include<algorithm>
using namespace std;
int n,x,y,z,a[55][55],f[55][55][55][55];
int main()
{
cin>>n>>x>>y>>z;
while(x>0&&y>0&&z>0)
{
a[x][y]=z;
cin>>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++)
{
int opt1=max(f[i-1][j][k-1][l],f[i][j-1][k][l-1]);
int opt2=max(f[i-1][j][k][l-1],f[i][j-1][k-1][l]);
f[i][j][k][l]=max(opt1,opt2)+a[i][j];
if(i!=k && j!=l) f[i][j][k][l]+=a[k][l];
}
}
}
}
cout<<f[n][n][n][n];
return 0;
}