穿纸条

hnahongyi 2023-12-16 11:12:10

//传纸条
#include<bits/stdc++.h>
using namespace std;
int a[51][51],f[101][51][51];
int main(){
    int m,n;
    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 i=2;i<=m+n-1;i++)
        for(int j=max(1,i-n+1);j<=min(m,i);j++)
            for(int k=max(1,i-n+1);k<=min(m,i);k++){
                f[i][j][k]=max(max(f[i-1][j][k],f[i-1][j-1][k]),max(f[i-1][j][k-1],f[i-1][j-1][k-1]))+a[j][i+1-j]+a[k][i+1-k];
                if(j==k) f[i][j][k]-=a[j][i+1-j]; 
            }
        printf("%d",f[n+m-1][m][m]);
        return 0;
}