DP状态:两个人走相同还是不相同,
DP转移:相同(从左向右,从上向下)
不同(一个从左向右,一个从上往下)
很经典的四维DP
#includeusing namespace std; int dp[100][100][100][100]; int a[100][100]; int N; int main() { int x,y,z; cin>>N; while(cin>>x>>y>>z) { if(!x&&!y&&!z)break; a[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 p=1;p<=N;p++) { int max1=max(dp[i-1][j][k-1][p],dp[i][j-1][k][p-1]); int max2=max(dp[i-1][j][k][p-1],dp[i][j-1][k-1][p]); int count=max(max1,max2)+a[i][j]; if(i!=k&&j!=p) { count+=a[k][p]; } dp[i][j][k][p]=count; } cout<


![P1004 [NOIP2000 提高组] 方格取数 P1004 [NOIP2000 提高组] 方格取数](http://www.mshxw.com/aiimages/31/529027.png)
