zoukankan      html  css  js  c++  java
  • 多重背包转换成全然背包和01背包

    void CompletePack(int cost,int weight)   多重背包
    {  
        for(int i=cost;i<=m;i++)  
        dp[i]=max(dp[i],dp[i-cost]+weight);  
    }  
    void ZeroOnePack(int cost,int weight)    01背包
    {  
        for(int i=m;i>=cost;i--)  
        dp[i]=max(dp[i],dp[i-cost]+weight);  
    }  
    void MultiplyPack(int cost,int weight,int amount)   全然背包
    {  
        if(cost*amount>=m)  
        CompletePack(cost,weight);  
        else  
        {  
        int k=1;  
        while(k<amount)  
        {  
            ZeroOnePack(k*cost,k*weight);  
            amount-=k;  
            k<<=1;  
        }  
        ZeroOnePack(amount*cost,amount*weight);  
        }  


    详情看
    HDU 2844 Coins (动规)

  • 相关阅读:
    python基础(5)
    python基础(4)
    python基础(3)
    python基础(2)
    第一个python程序(2)
    第一个python教程(1)
    【jQuery】
    【JavaScript】
    【练习】HTML+CSS
    【练习】Html
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5342386.html
Copyright © 2011-2022 走看看