题目: 传送门
Code:
#include<queue>
#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = 5001;
int c[maxn], w[maxn], m[maxn];
int dp[maxn][maxn];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
//freopen("out.txt", "w", stdout);
int n, v;
cin>>n>>v;
for (int i=1;i<=n;i++) {
cin>>c[i]>>w[i]>>m[i];
}
for (int i=1;i<=maxn;i++) {
dp[0][i] = 0;
dp[i][0] = 0;
}
for (int i=1;i<=n;i++) {
for (int j=v;j>0;j--) {
for (int k=0;k*c[i]<=j && k <= m[i];k++) {
dp[i][j] = max(dp[i-1][j-k*c[i]] + k*w[i], dp[i][j]);
}
}
}
cout<<dp[n][v]<<endl;
return 0;
}