每日打卡 还剩75道题
作者:
__NULL__
,
2024-08-08 11:54:11
,
所有人可见
,
阅读 73
#include<bits/stdc++.h>
using namespace std;
const int MAXX = 1e5 + 5;
int n, v, a[MAXX], b[MAXX], dp[MAXX], r1, r2, s[MAXX], cnt;
int main(){
cin >> n >> v;
for(int i = 1; i <= n; i++){
cin >> r1 >> r2 >> s[i];
int h = 1;
while(h <= s[i]){
a[++cnt] = r1 * h;
b[cnt] = r2 * h;
s[i] -= h;
h *= 2;
}
if(s[i] != 0){
a[++cnt] = r1 * s[i];
b[cnt] = r2 * s[i];
}
}
for(int i = 1; i <= cnt; i++){
for(int j = v; j >= a[i]; j--){
dp[j] = max(dp[j - a[i]] + b[i], dp[j]);
}
}
cout << dp[v];
return 0;
}
多重背包问题 II