#include<iostream>
#include<cstdio>
using namespace std;
/*
int a[60][60];
int f[60][60][60][60];
int m,n;
int Max(int a,int b,int c,int d)
{
int x=max(a,b),y=max(c,d);
return max(x,y);
}
int main()
{
cin>>m>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
for(int l=1;l<=m;l++)
for(int k=1;k<=n;k++)
{
if(i==l&&j==k) continue;
f[i][j][l][k]=Max(f[i-1][j][l-1][k],f[i-1][j][l][k-1],f[i][j-1][l-1][k],f[i][j-1][l][k-1])+a[i][j]+a[l][k];
}
cout<<f[m][n-1][m-1][n];
return 0;
}*/
int f[110][60][60];
int a[60][60];
int n,m;
int Max(int a,int b,int c,int d)
{
if(b>a) a=b;
if(c>a) a=c;
if(d>a) a=d;
return a;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int k=1;k<=n+m-1;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(k-i+1<1||k-j+1<1) continue;
f[k][i][j]=Max(f[k-1][i][j],f[k-1][i-1][j],f[k-1][i][j-1],f[k-1][i-1][j-1])+a[i][k-i+1]+a[j][k-j+1];
if(i==j) f[k][i][j]-=a[i][k-i+1];
}
cout<<f[n+m-1][n][n];
return 0;
}
P1006 传纸条
最新推荐文章于 2021-07-19 12:10:57 发布