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;
}

这道题目很经典也很简单

posted @ 2019-10-23 15:48  Gold_stein  阅读(470)  评论(0编辑  收藏  举报