01背包初始化的细节问题与循环下限的改进
转自:背包久讲 Tianyi Cui
初始化的细节问题
我们看到的求最优解的背包问题题目中,事实上有两种不太相同的问法。有的题目要求“恰好装满背包”时的最优解,有的题目则并没有要求必须把背包装满。一种区别这两种问法的实现方法是在初始化的时候有所不同。
如果是第一种问法,要求恰好装满背包,那么在初始化时除了f[0]为0其它f[1..V]均设为-∞,这样就可以保证最终得到的f[N]是一种恰好装满背包的最优解。
如果并没有要求必须把背包装满,而是只希望价格尽量大,初始化时应该将f[0..V]全部设为0。
为什么呢?可以这样理解:初始化的f数组事实上就是在没有任何物品可以放入背包时的合法状态。如果要求背包恰好装满,那么此时只有容量为0的背包可能被价值为0的nothing“恰好装满”,其它容量的背包均没有合法的解,属于未定义的状态,它们的值就都应该是-∞了。如果背包并非必须被装满,那么 任何容量的背包都有一个合法解“什么都不装”,这个解的价值为0,所以初始时状态的值也就全部为0了。
这个小技巧完全可以推广到其它类型的背包问题,后面也就不再对进行状态转移之前的初始化进行讲解。
一个常数优化
前面的伪代码中有 for v=V..1,可以将这个循环的下限进行改进。
由于只需要最后f[v]的值,倒推前一个物品,其实只要知道f[v-w[n]]即可。以此类推,对以第j个背包,其实只需要知道到f[v-sum{w[j..n]}]即可,即代码中的
for i=1..N
for v=V..0
可以改成
for i=1..n
bound=max{V-sum{w[i..n]},c[i]}
for v=V..bound
这对于V比较大时是有用的。
转载于:https://www.cnblogs.com/liudehao/p/4138684.html
01背包初始化的细节问题与循环下限的改进相关推荐
- HDU2546_用01背包做
题目大意: 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法 ...
- 0-1背包(及初始化问题)
你的背包 背到现在还没烂 却成为我身体另一半 千金不换 它已熟悉我的汗 它是我肩膀上的指环...... 刚学的背包入门问题: 0-1背包问题:有n种物品,每种只有一个,第i种物品的体积V[i],重量W ...
- 背包问题教程-01背包,完全背包,多重背包,混合背包 收藏
P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包问题,特点是:每种物品仅有 ...
- 动态规划-----------01背包,完全背包与多重背包
P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包问题,特点是:每种物品仅有 ...
- 对01背包的分析与理解(图文)
首先谢谢Christal_R的文章(点击转到链接)让我学会01背包 本文较长,但是长也意味着比较详细,希望您可以耐心读完. 题目: 现在有一个背包(容器),它的体积(容量)为V,现在有N种物品(每个物 ...
- 动态规划 —— 背包问题 P01 —— 0-1背包
[概述] 0-1背包问题是最基本的背包问题,它包含了背包问题中设计状态.方程的最基本思想,另外,别的类型的背包问题往往也可以转换成0-1背包问题求解. 特点:每种物品仅有一件,可以选择放或不放. [题 ...
- 01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目
(二)01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目 //有N件物品和一个容量为V的背包.第i件物品的体积是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. ...
- 01背包python解法_0-1背包问题及Python代码实现
1.简介 假设我们有n件物品,分别编号为1, 2...n.其中编号为i的物品价值为vi,它的重量为wi.为了简化问题,假定价值和重量都是整数值.现在,假设我们有一个背包,它能够承载的重量是W.现在,我 ...
- 背包九讲系列1——01背包、完全背包、多重背包
我在进行一些互联网公司的技术笔试的时候,对于我来说最大的难题莫过于最后的那几道编程题了,这对算法和数据结构有一定程度上的要求,而"动态规划"又是编程题中经常出现的算法类型,并且对于 ...
最新文章
- 为什么SpringBoot的 jar 可以直接运行?
- Java IO基础原理你该知道这些
- 化身“监工”的AI,我们该如何相处?
- python代码大全o-Python实现的一个自动售饮料程序代码分享
- UA MATH636 信息论5 信道编码定理的证明
- copyof java_JDK10——copyOf方法
- linux安装后启动mysql,linux安装完mysql后启动错误
- thinkphp单入口和多入口的访问方法
- 数据挖掘有哪些主要步骤
- 微信读书vscode插件_众所周知,拥有了vscode就拥有了一切
- 苹果的水果忍者未能连接到服务器是怎么回事,水果忍者无法连接服务器如何解决...
- UE4官方文档链接记录
- tomcat启动异常:org.apache.catalina.deploy.WebXml addFilter或者the JDBC Driver has been forcibly unregister
- Recovery启动流程(1)--- 应用层到开机进入recovery详解
- matlab求椭圆周长,用matlab计算椭圆周长及牛顿迭代的matlab完成
- 生成两组相互独立服从标准正态分布的随机数(推导过程)
- 英语句子成分和词类的关系
- 计算机认识新朋友教案,幼儿园认识新朋友教案
- 腾讯被爆内测配送机器人,与阿里顺丰直面物流竞争!
- 云智慧助力MLOps加速落地
热门文章
- SQLServer数据库收缩相关知识笔记
- 浅谈 Spring 框架注解的用法分析
- 8种你可能正在写错的SQL用法
- java delphi aes加密算法_Delphi AES,又一个加密算法例子
- 两条曲线所围成的面积_三个视频搞定:求曲边梯形面积的思想、微积分基本定理及其几何意义、微积分理论的可视化解读、...
- treelist自动定位行_国内首创!金川集团千米深井双定位补偿摇台投用
- mx2 android os耗电,魅族MX3 Flyme OS 3.2充电慢、耗电快问题的解决方法详解
- 怎么让qt发声_第3部分:添加网络字体-让我们的单词发声
- React 18 带给我们的惊喜
- 三年经验前端社招——丰巢科技