背包进阶
登录以参加训练计划
#include<bits/stdc++.h>
using namespace std;
long N,V,v[1001],w[1001],s[1001],dp[1001];
int main(){
cin>>N>>V;
for(int i=1;i<=N;i++) cin>>v[i]>>w[i]>>s[i];
for(int i=1;i<=N;i++){
if(s[i]==0){
for(int j=v[i];j<=V;j++){
dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
}
}
else if(s[i]==1||s[i]==-1){
for(int j=V;j>=v[i];j--){
dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
}
}
else{
for(int j=V;j>=v[i];j--){
for(int k=0;k<=min(j/v[i],s[i]);k++){
dp[j]=max(dp[j],dp[j-v[i]*k]+w[i]*k);
}
}
}
}
cout<<dp[V];
return 0;
}
//printf("%.3f\n",a);//C语言
//cout<<fixed<<setprecision(2)<<a;//C++
- 参加人数
- 12
- 创建人