0-1背包 完全背包 多重背包 模板

代码
   
     
#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) ;
}
}

 

网上抄来的一份代码,还是相当不错的!

你可能感兴趣的:(模板)