#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
vector<int> ac;
const int N = 102;
int f[N][N], a[N][N], n, m;
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
scanf("%d", &a[i][j]);
memset(f, -0x3f, sizeof(f));
for (int i = 0; i <= m; i++)
f[0][i] = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
f[i][j] = max(f[i][j], max(f[i - 1][j - 1] + a[i][j], f[i][j - 1]));
cout << f[n][m] << endl;
int pos = m, sum = f[n][m];
for (int i = n; i >= 1; i--)
for (int j = pos; j >= 1; j--)
{
if (f[i][j] < sum)
{
ac.push_back(j + 1);
pos = j, sum = f[i - 1][j];
break;
}
}
for (int i = ac.size() - 1; ~i; i--)
cout << ac[i] << " ";
}
我代码输出的数值跟测试点答案是一样的,不同的是输出的花瓶序号,但这不是SPJ题目吗???? 我的输出: 1383 3 4 5 6 7 9 10 11 12 13 14 15 16 17 18 21 22 23 24 26 27 28 30 31 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 测试点输出: 1383 1 3 4 5 6 7 9 10 11 12 13 14 15 16 17 18 21 22 23 24 26 27 28 30 31 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100