考虑两个人走 d p [ i ] [ j ] [ k ] [ z ] 表 示 1 在 ( x , y ) , 2 在 ( k , z ) 的 最 大 值 dp[i][j][k][z]表示 1在(x,y),2在(k,z)的最大值 dp[i][j][k][z]表示1在(x,y),2在(k,z)的最大值
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=10;
ll dp[N][N][N][N];
int a[N][N],n;
int main(){
scanf("%d",&n);
int x,y,val;
while(x!=0||y!=0||val!=0){
scanf("%d%d%d",&x,&y,&val); a[x][y]=val;
}
dp[0][0][0][0]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
for(int z=1;z<=n;z++){
if(i==k&&j==z){dp[i][j][k][z]=max(max(dp[i-1][j][k-1][z],dp[i][j-1][k-1][z]),max(dp[i][j-1][k][z-1],dp[i-1][j][k][z-1]))+1ll*a[i][j];continue;}
dp[i][j][k][z]=max(max(dp[i-1][j][k-1][z],dp[i][j-1][k-1][z]),max(dp[i][j-1][k][z-1],dp[i-1][j][k][z-1]))+1ll*a[i][j]+1ll*a[k][z];
}
printf("%lld",dp[n][n][n][n]);
}

491

被折叠的 条评论
为什么被折叠?



