背包进阶

登录以参加训练计划

课件

#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++ 

章节 1. 课上讲解

开放

题目 尝试 AC 难度
P814   【基础】多重背包(1) 41 7 8
P815   【提高】多重背包(2) 28 7 7

章节 2. 课后拓展

开放

题目 尝试 AC 难度
A477   【例86.4】 混合背包 22 6 8
P831   【提高】混合背包 45 9 8
 
参加人数
12
创建人