这是我之前提交的,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,为什么第二种能过啊。
——来自蒟蒻满脸的疑惑