分组背包

分组背包是LC(01)背包的一种变形吧。它就是给你一点质量,你不一定全部质量都要选,可以看看HDUOJ的Saving HDU,如果用01背包算出来就是3,用分组背包或者贪心算出来就是5
模板

//n为物品种类,v是背包容量,pi为物品价格,m为物品质量
//前面的i也得是1,不能是0
for(int i=1;i<=n;i++){
    for(int j=v;j>=0;j--){
        for(int k=1;k<=m[i];k++){
            int t1=k,t2=k*pi[i];
            if(j

 

Title

分组背包_第1张图片
某一水题
#include 
#include 
#include 
using namespace std;
int n,t,w1[1000001],w2[1000001],t1[1000001],t2[1000001],dp[1000001];
int main(){
    cin>>n>>t;
    for(int i=0;i>w1[i]>>t1[i]>>w2[i]>>t2[i];
    for(int i=0;i=min(t1[i],t2[i]);j--){
            if(t1[i]<=j)
                dp[j]=max(dp[j],dp[j-t1[i]]+w1[i]);
            else 
                dp[j]=max(dp[j],dp[j-t2[i]]+w2[i]);
        }
    cout<

你可能感兴趣的:(分组背包)