混合背包(模板)只保留了函数部分(每个函数对应了每一种背包)侧面反应了多重背包可以换为01和完全背包而且更快

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,num[110],v[110],ans;
int val[100010];
void package01(int weigh){
    for(int i=m;i>=weigh;--i)
        val[i]=max(val[i],val[i-weigh]);
} 
void packageComplete(int weigh){
    for(int i=weigh;i<=m;++i)
        val[i]=max(val[i],val[i-weigh]);
} 
void packageMultiple(int nums,int val){
    if(nums*val>=m)
        packageComplete(val);
    else{
         for (int k = 1; num > 0; k*=2)
        {
            if (k > num) k = num;
            num -= k;
            pcakage01(val*k);
        }
    }
} 

猜你喜欢

转载自blog.csdn.net/weixin_42165786/article/details/81562556
今日推荐