1823:【00NOIP提高组】方格取数
#include<bits/stdc++.h> using namespace std; int n,g[15][15]; int f[15][15][15][15]; inline int max(int x,int y) { return x>y?x:y; } int main() { int i,j,k,l; scanf("%d",&n); while(true) { int x,y,v; scanf("%d%d%d",&x,&y,&v); g[x][y]=v; if(x==0&&y==0&&v==0) break; } for(i=1;i<=n;i++) for(j=1;j<=n;j++) for(k=1;k<=n;k++) for(l=1;l<=n;l++) { f[i][j][k][l]=max(max(f[i-1][j][k-1][l],f[i-1][j][k][l-1]),max(f[i][j-1][k][l-1],f[i][j-1][k-1][l])) +g[i][j]+g[k][l]; if(i==k&&j==l) f[i][j][k][l]-=g[i][j]; } printf("%d",f[n][n][n][n]); return 0; }
这道题目很经典也很简单