首页 > 其他分享 >DP查缺补漏之多重背包优化原理

DP查缺补漏之多重背包优化原理

时间:2023-11-01 22:34:13浏览次数:27  
标签:多重 补漏 背包 二进制 查缺 DP

DP查缺补漏之多重背包优化原理

普通思路

  • 类似完全背包

  • for(int i=1;i<=n;i++)
        for(int j=1;j<=V;j++)
            for(int k=1;k<=V/c[i];k++)
                {
                    if(k*c[i]<=j)
                        f[i][j]=max(f[i-1][j],f[i-1][j-k*c[i]]+k*w[i]);
                    else 
                        f[i][j]=f[i-1][j];
                }
    

二进制拆分优化

原理

任何数都能用二进制表示,任何正整数都能由若干个不同的\(2^n\)相加得到。

做法

直接把多重背包每一个分组的物品用二进制预处理成几个大物品。

然后直接用物品跑01背包即可

代码

for(int i=1;i<=n;i++)
{
    for(int j=1;j<=num[i];j<<=1)
    //二进制每一位枚举.
    //注意要从小到大拆分
    {
        num[i]-=j;//减去拆分出来的
        new_c[++tot]=j*c[i];//合成一个大的物品的体积
        new_w[tot]=j*w[i];//合成一个大的物品的价值
    }
    if(num[i])//判断是否会有余下的部分.
    //就好像我们某一件物品为13,显然拆成二进制为1,2,4.
    //我们余出来的部分为6,所以需要再来一份.
    {
        new_c[++tot]=num[i]*c[i];
        new_w[tot]=num[i]*w[i];
        num[i]=0;
    }
}

标签:多重,补漏,背包,二进制,查缺,DP
From: https://www.cnblogs.com/kdlyh/p/17804299.html

相关文章

  • poj 2411 状压dp入门题
    Mondriaan'sDreamTimeLimit:3000MS MemoryLimit:65536KTotalSubmissions:29096 Accepted:15505DescriptionSquaresandrectanglesfascinatedthefamousDutchpainterPietMondriaan.Onenight,afterproducingthedrawingsinhis�......
  • [学习笔记]TypeScript查缺补漏(二):类型与控制流分析
    @目录类型约束基本类型联合类型控制流分析instanceof和typeof类型守卫和窄化typeof判断instanceof判断in判断内建函数,或自定义函数赋值布尔运算保留共同属性字面量类型(literaltype)asconst作用类型约束TypeScript中的类型是一种用于描述变量、函数参数和函数返回值的特征的方......
  • UDP 协议
    UDP协议UDP(UserDatagramProtocol),目标是在传输层提供直接发送报文(Datagram)的能力。Datagram是数据传输的最小单位。UDP协议不会帮助拆分数据,它的目标只有一个,就是发送报文。   与tcp差异  ......
  • CF练习题17(DP)
    ChocolateBar我们看到\(n,m\le30\)想到暴搜。考虑枚举分割线,一直到刚好满足需要或者只有一个巧克力的情况。随手跑了个最优解。inlineintdfs(intn,intm,intk){ if(n*m==k)return0; if(k<=0)return0; if(f[n][m][k]<inf)returnf[n][m][k]; intres=inf; up(i,......
  • DP查缺补漏之01背包优化原理
    DP查缺补漏之01背包优化原理先复习一下基本知识状态假设DP[I][J]为前\(i\)个物品,容量小于\(j\)时的最优解(最大价值)状态转移DP[I][J]=max(DP[I-1][J],DP[I-1][J-V[I]]+W[I])对于第\(i\)个物品,两种可能装入背包则状态应通过前\(i-1\)个物品,容量小于\(j......
  • PoW、PoS、DPoS和PBFT简介
    1.概览PoW(工作量证明)、PoS(权益证明)、DPoS(委托权益证明)和PBFT(拜占庭容错)是区块链和分布式系统领域中常见的共识算法。下面将详细介绍这些共识算法的原理和特点:PoW(工作量证明):原理:PoW是比特币等区块链网络使用的共识算法。在PoW中,矿工通过解决一个数学难题(哈希碰撞)来创建新的区......
  • [学习笔记]TypeScript查缺补漏(一):类
    @目录基础知识创建类型类的初始化类型和值JSDoc注释字段私有字段可选和非可选字段字段类型约束Getter/Setter静态成员函数重载构造函数参数属性类的实例化箭头函数this的作用域全局类和对象方法泛型泛型类泛型接口泛型函数装饰器基础知识创建类型classAbc{}类的初始化co......
  • 05. UDP编程
    一、什么是UDP协议  相对于TCP协议,UDP协议则是面向无连接的协议。使用UDP协议时,不需要建立连接,只需要知道对象的IP地址和端口号,就可以直接发数据包。但是,数据无法保证一定到达。虽然用UDP传输数据不可靠,但它的优点是比TCP协议的速度快。对于不要求可靠到达的数据而......
  • 重新使用android studio编写udp socket程序,备忘记录
    1,建立socket需要使用子线程而不是主线程。2,java/android使用数据报格式。3,可以利用python作为socket的客户/服务器端,非常简单。但python可以不使用数据报,而直接使用字符串。当然也可以使用数据报。当与android配合时使用数据报格式4,一般地,传输的是字符串,因此,数字要编码为字符串......
  • 集众力、汇众智,2023 中国计算机大会 DPU技术论坛成功举办
    以“发展数字基础设施、支撑数字中国建设”为主题的第二十届中国计算机大会(CNCC2023)10月26日在沈阳启幕,约1.3万名计算机行业专业人士齐聚沈阳,据组委会介绍参加本届大会的院士多达49位。中科驭数在大会中组织的DPU技术论坛以“大算力需求背景下,DPU芯片应用实践和解决方案探索”为主......