01背包 完全背包 多重背包 模板

代码
#define MAX 10005
#define max(a,b) (a>b?a:b)

int W;
int dp[MAX];

void ZoreOnePack(int cost , int weight){
//0-1背包
for (int i = W ; i >= weight ; -- i)
dp[i]
= max(dp[i],dp[i-weight]+cost) ;
}
void CompletePack(int cost , int weight){
//完全背包
for (int i = weight ; i <= W ; ++ i)
dp[i]
= max(dp[i],dp[i-weight]+cost) ;
}
void MultiPack(int cost , int weight , int num){
//多重背包
if (num*weight>=W)
CompletePack(cost,weight) ;
else {
int k = 1 ;
while (k<num) {
ZoreOnePack(cost
*k,weight*k) ;
num
-= k ; k += k ;
}
ZoreOnePack(cost
*num,weight*num) ;
}
}
网上抄来的一份代码,还是相当不错的!

原文地址:https://www.cnblogs.com/silencExplode/p/1917205.html