LuoGu P1006 传纸条

题目传送门

这题嘛...方格取数和这题一样一样的

只不过这题是从左上到右下再回去罢了(来回一趟和来两趟有区别么?没有,那么这题和上题用一样的转移和状态就行了

没什么好说的,说一下我的错误好了:

人家图是 \(n*m\) 的,我给存成了 \(n*n\) 的(即使这样还是得了60分)

读入对了后,转移的时候又成了 \(n*n\) 的(即使这样还是得了80分)

最后,终于A了

#include <iostream>
#include <cstdlib>
#include <cstdio>
#define max(a,b) (a>b?a:b)

using namespace std;

const int N=55;

int e[N][N],f[N][N][N][N];
int n,m; 

int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j)
            scanf("%d",&e[i][j]);
    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j)
            for(int k=1;k<=n;++k)
                for(int l=1;l<=m;++l){
                    f[i][j][k][l]=max(f[i-1][j][k-1][l],max(f[i-1][j][k][l-1],max(f[i][j-1][k-1][l],f[i][j-1][k][l-1])))+e[i][j]+e[k][l];
                    if(i==k&&j==l) f[i][j][k][l]-=e[i][j];
                }
    printf("%d\n",f[n][m][n][m]);
    return 0;
}
posted @ 2018-09-06 20:05  Phecda  阅读(141)  评论(0)    收藏  举报

Contact with me