记录编号 324072 评测结果 AAAAAAAAAA
题目名称 [NOIP 2008]传纸条 最终得分 100
用户昵称 GravatarKulliu 是否通过 通过
代码语言 C++ 运行时间 0.015 s
提交时间 2016-10-17 19:13:02 内存使用 6.94 MiB
显示代码纯文本
 #include<cstdio>
    #include<algorithm>
    using namespace std;
     
    int f[120][120][120];
    int a[120][120];
    int Max(int a, int b)
    {
    	return a>b?a:b;
    }
     
    int GetMax(const int& a, const int& b, const int& c, const int& d)
    {
    	int ret=0;
    	ret=Max(a,ret);
    	ret=Max(b,ret);
    	ret=Max(c,ret);
    	ret=Max(d,ret);
    	return ret;
    }
     
    int main()
    {
    	freopen("message.in","r",stdin);
    	freopen("message.out","w",stdout);
    	int m,n,w1,w2,w3,w4;
    	scanf("%d%d",&m,&n);
    	for(int i=1;i<=m;i++)
    		for(int j=1;j<=n;j++)
    			scanf("%d",&a[i][j]);
    			
    	for(int k=1;k<=m+n-2;k++){
    		for(int i1=1;i1<=m;i1++){
    			for(int i2=1;i2<=m;i2++){
    				if(i1!=i2){
    					w1=f[k-1][i1][i2];
    					w2=f[k-1][i1-1][i2];
    					w3=f[k-1][i1][i2-1];
    					w4=f[k-1][i1-1][i2-1];
    					f[k][i1][i2]=GetMax(w1,w2,w3,w4)+a[i1][k-i1+2]+a[i2][k-i2+2];
    				}		
    			}
    		}
    	}	
    	printf("%d\n",Max(f[m+n-2][m][m-1],f[m+n-2][m-1][m]));
    	return 0;
    }