#include <bits/stdc++.h>
using namespace std;
using PII = pair<int, int>;
const int N = 2005;
int dp[N];
int main()
{
#ifndef ONLINE_JUDGE
freopen("D:/VS CODE/C++/in.txt", "r", stdin);
freopen("D:/VS CODE/C++/out.txt", "w", stdout);
#endif
int n, v;
cin >> n >> v;
vector<PII> goods;
for (int i = 0; i < n; ++i) {
int vol, w, s;
cin >> vol >> w >> s;
for (int j = 1; j <= s; j *= 2) {
goods.push_back({j * vol, j * w});
s -= j;
}
if (s > 0)
goods.push_back({s * vol, s * w});
}
for (auto item : goods) {
for (int j = v; j >= item.first; --j) {
dp[j] = max(dp[j], dp[j - item.first] + item.second);
}
}
cout << dp[v];
fclose(stdin);
fclose(stdout);
return 0;
}
多重背包问题 二进制优化 模板
最新推荐文章于 2023-04-23 22:34:08 发布