比赛 清明时节雨纷纷,今天天气很晴朗 评测结果 AAAAAAAAAA
题目名称 传纸条 最终得分 100
用户昵称 Menamovic 运行时间 0.011 s
代码语言 C++ 内存使用 1.40 MiB
提交时间 2017-04-07 19:54:53
显示代码纯文本
#include<cstdio>
using namespace std;  
int n,m;  
int i,j,k;  
int Map[51][51];  
int F[111][51][51];  
int Max(int a,int b,int c,int d)  
{  
    if(a>=b&&a>=c&&a>=d)  
        return a;  
    if(b>=a&&b>=c&&b>=d)  
        return b;  
    if(c>=a&&c>=b&&c>=d)  
        return c;  
    if(d>=a&&d>=b&&d>=c)  
        return d;  
}  
int main()  
{  
    freopen("message.in","r",stdin);
    freopen("message.out","w",stdout);
    scanf("%d%d",&n,&m);  
    for(i=1;i<=n;i++)  
      for(j=1;j<=m;j++)  
      {
        scanf("%d",&Map[i][j]);
	  }
    for(k=1;k<=n+m-2;k++)  
        for(i=1;i<=n;i++)  
            for(j=1;j<=n;j++)  
                if(i==n&&j==n&&k==n+m-2)  
                    F[k][i][j]=Max(F[k-1][i-1][j],F[k-1][i][j-1],F[k-1][i][j],F[k-1][i-1][j-1])+Map[i][k+2-i]+Map[j][k+2-j];  
                else  if(i!=j&&k+2-i>=1&&k+2-j>=1)  
                    F[k][i][j]=Max(F[k-1][i-1][j],F[k-1][i][j-1],F[k-1][i][j],F[k-1][i-1][j-1])+Map[i][k+2-i]+Map[j][k+2-j];  
    printf("%d",F[n+m-2][n][n]);  
    return 0;  
}