代码如下
#include<bits/stdc++.h>
using namespace std;
const int N=55;
int m,n,w[N][N];
int f[N*2][N][N];
int main(){
cin>>m>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
cin>>w[i][j];
//memset(f,-0x3f,sizeof f);
for(int k=2;k<=m+n;k++)
for(int i=1;i<=n && i<k ;i++)
for(int j=1;j<=n && j<k;j++){
int v = w[i][k - i];
if (i != j) v += w[j][k - j];
int &t = f[k][i][j];
t = max(t, f[k - 1][i][j]);
t = max(t, f[k - 1][i - 1][j]);
t = max(t, f[k - 1][i][j - 1]);
t = max(t, f[k - 1][i - 1][j - 1]);
t += v;
}
cout << f[n + m][n][n] << endl;
return 0;
}
问题:
1.为什么只能初始化为0,初始化为-0x3f就不对了
2.在dp的过程中,不是要走两条路吗,为什么只加了一个f数组
3.i,j的循环感觉有问题