#include <bits/stdc++.h>
using namespace std;
int v[1005],w[1005],vv[10005],ww[10005],dp[40000005];
int main(){
int n,m,o,q,cnt=0;
cin>>n>>m;
for(int i=1;i<=n;i++){
scanf("%d%d%d",&v[i],&w[i],&o);
q=1;
if(o==-1||o==1){
cnt+=1;
vv[cnt]=v[i],ww[cnt]=w[i];
continue;
}
else if(o==0){
o=m/v[i];
}
while(q<=o){
cnt+=1,o-=q;
vv[cnt]=v[i]*cnt,ww[cnt]=w[i]*cnt;
q*=2;
}
if(o>0){
cnt+=1;
ww[cnt]=o*w[i],vv[cnt]=o*v[i];
}
}
for(int i=1;i<=cnt;i++){
for(int j=m;j>=vv[i];j--){
dp[j]=max(dp[j],dp[j-vv[i]]+ww[i]);
}
}
cout<<dp[m];
return 0;
}
题目地址:acwing
刚学dp,不知道哪里不对,麻烦大家了