用一个四维数组来记录,dp[i][j][k][l] , 第一个人走到i,j取得的最大值, 第二个人走到k,l取到的最大值
#include <cstdio>
#include <algorithm>
using namespace std ;
const int N = 15 ;
int maze[N][N] ;
int dp[N][N][N][N] ;
int n ;
int main(){
scanf ("%d",&n) ;
int x , y , v ;
while(~scanf("%d%d%d",&x,&y,&v)){
if (x == 0 && y==0 && v==0)
break ;
maze[x][y] = v ;
}
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(max(dp[i-1][j][k-1][l],dp[i][j-1][k][l-1]),max(dp[i][j-1][k-1][l],dp[i-1][j][k][l-1]))
+ maze[k][l] + maze[i][j] ;
if (i == k && j == l){
dp[i][j][k][l] -= maze[i][j] ;
}
}
}
}
}
printf ("%d\n",dp[n][n][n][n]) ;
return 0 ;
}