#include<stdio.h>
int main()
{
int N,m[15][17]={0};
int dp[15][17][17][15]={0};
int x,y,v;
int i,j,k,o;int p1,p2;
scanf("%d",&N);
do{
scanf("%d %d %d",&x,&y,&v);
m[x][y]=v;
}while(x||y||v);
for(i=1;i<N+1;++i)
for(j=1;j<N+1;++j)
for(k=1;k<N+1;++k)
for(o=1;o<N+1;++o)
{
p1=dp[i-1][j][k-1][o]>dp[i-1][j][k][o-1]?dp[i-1][j][k-1][o]:dp[i-1][j][k][o-1];
p2=dp[i][j-1][k-1][o]>dp[i][j-1][k][o-1]?dp[i][j-1][k-1][o]:dp[i][j-1][k][o-1];
dp[i][j][k][o]=(p1>p2?p1:p2)+m[i][j]+m[k][o]*(!(i==k&&j==o));
}
printf("%d",dp[N][N][N][N]);
return 0;
}
总步数可求,已走步数已知,选择已走步数和单个方向的坐标位置作为最优解组成部分来优化空间。