动态规划之背包DP专题

动态规划之背包DP专题

背包九讲链接

背包问题模板

int v,j;     //v:总容量 
int dp[Maxv];    //c:体积  w:价值   n:数量 
void zobag(int c,int w)//01背包 
{
    for(j=v;j>=c;j--)
    dp[j]=Max(dp[j],dp[j-c]+w);
}
void combag(int c,int w)//完全背包 
{
    for(j=c;j<=v;j++)
    dp[j]=Max(dp[j],dp[j-c]+w);
}
void multibag(int c,int w,int n)//多重背包 
{
    if(c*n>v)     //当物品的总容量大于背包的总容量时,相当于完全背包 
    combag(c,w);
    else   //转换为01背包,二进制思想优化(例:13可以分为 1(2^0)、2(2^1)、4(2^2)、6,
           //因为1、2、4、6这四个数可以组合成1—13中的所有数字)  
    {
        int k=1;
        while(k<n)
        {
            zobag(c*k,w*k);
            n-=k;
            k*=2;
        }
        zobag(c*n,w*n);
    }
} 

SSOI题目传送门:

【最大约数和】
【宝石手镯】
【宝石手镯(2)】
【垃圾陷阱】
【完全背包】
【股票市场】
【Round Subset
【消失之物】
【购买大米】
【宝石分组】
【金明的预算方案】
【课程分配】
【搭配购买】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值