如果状态之间能够相互推出 注意排除冗余状态
//main::
f[0][1][1]=a[1][1];
for(int i=1;i<=(n+m-2);i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
if(i+2-j>0&&i+2-k>0)
{
int &x=f[i][j][k];
x=max(x,f[i-1][j-1][k-1]);
x=max(x,f[i-1][j][k-1]);
x=max(x,f[i-1][j-1][k]);
x=max(x,f[i-1][j][k]);
x+=a[j][i+2-j]+a[k][i+2-k]*(j!=k);
}
printf("%d",f[n+m-2][n][n]);