3个WA,求助
查看原帖
3个WA,求助
339978
大白菜ac楼主2020/8/10 19:46

我也是按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;
}
2020/8/10 19:46
加载中...