zoukankan      html  css  js  c++  java
  • 01、完全、多重背包模板

    背包问题:

    背包总容量为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); 
        }
    }
    宝剑锋从磨砺出 梅花香自苦寒来
  • 相关阅读:
    ATM代码及遇到的问题总结
    暑假日报-52
    暑假日报-51
    暑假日报-50
    暑假日报-49
    暑假日报-48
    线段树优化建图(炸弹 + 选课)
    联考day2 C. 舟游
    联赛模拟测试5题解
    第19周作业
  • 原文地址:https://www.cnblogs.com/GHzcx/p/7807008.html
Copyright © 2011-2022 走看看