关于dp初始化的疑问,求助大佬
查看原帖
关于dp初始化的疑问,求助大佬
999053
wzx20110103楼主2023/8/30 20:12

这是我之前提交的,WA了一个点。 提交点信息

#include <iostream>
using namespace std;
int a[110][110];
int dp[110][110];

int main() {
	int f, v;
	cin >> f >> v;

	for (int i = 1; i <= f; i++) {
		dp[i][0] = -0x3f;
		for (int j = 1; j <= v; j++) {
			cin >> a[i][j];
		}
	}
	for (int i = 1; i <= f; i++) {
		for (int j = 1; j <= v; j++) {
			dp[i][j] = max(dp[i][j - 1], a[i][j] + dp[i - 1][j - 1]);
		}
	}
	cout << dp[f][v] << endl;
	int t = v;
	int h[110];
	for (int i = f; i >= 1; i--) {
		int max = -0x3f;
		int s;
		for (int j = 1; j <= t; j++) {
			if (dp[i][j] > max) {
				s = j;
				max = dp[i][j];
			}
		}
		t = s - 1;
		h[i] = s;
	}
	for (int i = 1; i <= f; i++) {
		cout << h[i] << " ";
	}
	return 0;
}

这是我后面AC的代码。

#include <bits/stdc++.h>
using namespace std;
int a[110][110];
int dp[110][110];

int main() {
	int f, v;
	cin >> f >> v;
	for (int i = 1; i <= f; i++) {
		//dp[i][0] = -0x3f;
		for (int j = 1; j <= v; j++) {
			cin >> a[i][j];
		}
	}
	memset(dp, -0x3f, sizeof(dp));
	for (int i = 0; i <= v; i++) {
		dp[0][i] = 0;
	}
	for (int i = 1; i <= f; i++) {
		for (int j = 1; j <= v; j++) {
			dp[i][j] = max(dp[i][j - 1], a[i][j] + dp[i - 1][j - 1]);
		}
	}
	cout << dp[f][v] << endl;
	int t = v;
	int h[110];
	for (int i = f; i >= 1; i--) {
		int max = -0x3f;
		int s;
		for (int j = 1; j <= t; j++) {
			if (dp[i][j] > max) {
				s = j;
				max = dp[i][j];
			}
		}
		t = s - 1;
		h[i] = s;
	}
	for (int i = 1; i <= f; i++) {
		cout << h[i] << " ";
	}
	return 0;
}

求助大佬们orz,为什么第二种能过啊。

——来自蒟蒻满脸的疑惑

2023/8/30 20:12
加载中...