码迷,mamicode.com
首页 > 其他好文 > 详细

01、完全、多重背包模板

时间:2017-11-09 00:49:52      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:microsoft   span   pack   log   背包   com   val   pac   容量   

背包问题:

背包总容量为W,有n件重量为weight[i],权值为value[i]的物品

1、01背包:

这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。

1 void ZeroOnePack (int weight,int value)
2 {
3     for (int w = W; w >= weight; w--)
4         dp[w] = max(dp[w - weight] + value, dp[w]);
5 }

2、完全背包:

每件物品有无限多个。

void CompletePack (int weight,int value)
{
	for (int w = weight; w <= W; w++)
		dp[w] = max(dp[w - weight] +value, dp[w]);
}

3、多重背包:

每件物品有有限制多个。(二进制优化)

void MultiplePack (int weight,int value,int count)
{
    if (weight * count > W)
    {
        CompletePack (weight,value);
    }
    else
    {
        int k = 1;  
        while(k<count)  
        {  
            ZeroOnePack (k * weight,k * value);  
            count -= k;  
            k = k << 1;  
        }  
        ZeroOnePack (count * weight,count * value); 
    }
}

 

01、完全、多重背包模板

标签:microsoft   span   pack   log   背包   com   val   pac   容量   

原文地址:http://www.cnblogs.com/BigLove/p/7807008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!