我也是按01背包做的,但不知道哪里有问题?求解答
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
struct ex {
int lose, win, use;
}k[1005];
int main() {
int n, x;
cin >> n >> x;
for (int i = 1; i <= n; i++) {
cin >> k[i].lose >> k[i].win >> k[i].use;
if (k[i].use == 0)
k[i].lose = k[i].win;
}
ll f[1005][1005], sum = 0;
//初始化
for (int i = 1; i <= n; i++)
f[i][0] = k[i].lose, sum += f[i][0];
for (int i = 0; i <= x; i++)
f[0][i] = 0;
//自底向上求最优解值
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= x; j++) {
if (j >= k[i].use)
f[i][j] = max(f[i - 1][j] + k[i].lose, f[i - 1][j - k[i].use] + k[i].win);
else
f[i][j] = f[i - 1][j] + k[i].lose;
}
}
if (x == 0)
cout << sum * 5;
else cout << f[n][x] * 5;
return 0;
}