方格取数(P1004)
#include<iostream> #include<algorithm> using namespace std; int n,x,y,z; int a[11][11][11][11],b[11][11]; int main(){ cin>>n; while(cin>>x>>y>>z&&x!=0&&y!=0)b[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 g=1;g<=n;g++){ a[i][j][k][g]=max(max(a[i-1][j][k-1][g],a[i-1][j][k][g-1]),max(a[i][j-1][k-1][g],a[i][j-1][k][g-1]))+b[i][j]+b[k][g]; if(i==k&&j==g)a[i][j][k][g]-=b[i][j]; } } } } cout<<a[n][n][n][n]<<endl; return 0; }