怎么判重?不是两条路吗为什么只加了一个f?
查看原帖
怎么判重?不是两条路吗为什么只加了一个f?
1096122
HenterGaocai楼主2024/8/4 22:34

代码如下

#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的循环感觉有问题

2024/8/4 22:34
加载中...