```cpp
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,a[12][12],f[12][12][12][12];
int x,y,z;
int ele_max(int a,int b,int c,int d)
{
a=max(a,b);
a=max(a,c);
a=max(a,d);
return a;
}
int main()
{
cin>>n;
cin>>x>>y>>z;
while(x!=0||y!=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=i+1;k<=n;k++)
{
for(int l=1;l<=n;l++)
{
f[i][j][k][l]=ele_max(
f[i-1][j][k-1][l],
f[i-1][j][k][l-1],
f[i][j-1][k-1][l],
f[i][j-1][k][l-1]
)
+a[i][j]+a[k][l];
}
}
}
}
if(a[n][n])
f[n-1][n][n][n-1]+=2*a[n][n];
cout<<f[n-1][n][n][n-1];
}
```
by 绫小路帆波 @ 2019-09-30 06:18:44
我判重的方法是把一条路放在另一条路的上面,也就是k=i+1,这样可以得到最优解
by 绫小路帆波 @ 2019-09-30 06:19:50
@[绫小路帆波](/space/show?uid=245005) 你好像没有判断当i,j和k,l在一个点的时候只能取一次
by jxyzs @ 2019-09-30 08:18:08
@[绫小路帆波](/space/show?uid=245005) 其实这题和传纸条不一样,路线可以交叉。。。
by 老跳蛙 @ 2019-09-30 10:02:48