转自:背包久讲 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背包初始化的细节问题与循环下限的改进相关推荐

  1. HDU2546_用01背包做

    题目大意:          电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法 ...

  2. 0-1背包(及初始化问题)

    你的背包 背到现在还没烂 却成为我身体另一半 千金不换 它已熟悉我的汗 它是我肩膀上的指环...... 刚学的背包入门问题: 0-1背包问题:有n种物品,每种只有一个,第i种物品的体积V[i],重量W ...

  3. 背包问题教程-01背包,完全背包,多重背包,混合背包 收藏

    P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包问题,特点是:每种物品仅有 ...

  4. 动态规划-----------01背包,完全背包与多重背包

    P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包问题,特点是:每种物品仅有 ...

  5. 对01背包的分析与理解(图文)

    首先谢谢Christal_R的文章(点击转到链接)让我学会01背包 本文较长,但是长也意味着比较详细,希望您可以耐心读完. 题目: 现在有一个背包(容器),它的体积(容量)为V,现在有N种物品(每个物 ...

  6. 动态规划 —— 背包问题 P01 —— 0-1背包

    [概述] 0-1背包问题是最基本的背包问题,它包含了背包问题中设计状态.方程的最基本思想,另外,别的类型的背包问题往往也可以转换成0-1背包问题求解. 特点:每种物品仅有一件,可以选择放或不放. [题 ...

  7. 01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目

    (二)01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目 //有N件物品和一个容量为V的背包.第i件物品的体积是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. ...

  8. 01背包python解法_0-1背包问题及Python代码实现

    1.简介 假设我们有n件物品,分别编号为1, 2...n.其中编号为i的物品价值为vi,它的重量为wi.为了简化问题,假定价值和重量都是整数值.现在,假设我们有一个背包,它能够承载的重量是W.现在,我 ...

  9. 背包九讲系列1——01背包、完全背包、多重背包

    我在进行一些互联网公司的技术笔试的时候,对于我来说最大的难题莫过于最后的那几道编程题了,这对算法和数据结构有一定程度上的要求,而"动态规划"又是编程题中经常出现的算法类型,并且对于 ...

最新文章

  1. 为什么SpringBoot的 jar 可以直接运行?
  2. Java IO基础原理你该知道这些
  3. 化身“监工”的AI,我们该如何相处?
  4. python代码大全o-Python实现的一个自动售饮料程序代码分享
  5. UA MATH636 信息论5 信道编码定理的证明
  6. copyof java_JDK10——copyOf方法
  7. linux安装后启动mysql,linux安装完mysql后启动错误
  8. thinkphp单入口和多入口的访问方法
  9. 数据挖掘有哪些主要步骤
  10. 微信读书vscode插件_众所周知,拥有了vscode就拥有了一切
  11. 苹果的水果忍者未能连接到服务器是怎么回事,水果忍者无法连接服务器如何解决...
  12. UE4官方文档链接记录
  13. tomcat启动异常:org.apache.catalina.deploy.WebXml addFilter或者the JDBC Driver has been forcibly unregister
  14. Recovery启动流程(1)--- 应用层到开机进入recovery详解
  15. matlab求椭圆周长,用matlab计算椭圆周长及牛顿迭代的matlab完成
  16. 生成两组相互独立服从标准正态分布的随机数(推导过程)
  17. 英语句子成分和词类的关系
  18. 计算机认识新朋友教案,幼儿园认识新朋友教案
  19. 腾讯被爆内测配送机器人,与阿里顺丰直面物流竞争!
  20. 云智慧助力MLOps加速落地

热门文章

  1. SQLServer数据库收缩相关知识笔记
  2. 浅谈 Spring 框架注解的用法分析
  3. 8种你可能正在写错的SQL用法
  4. java delphi aes加密算法_Delphi AES,又一个加密算法例子
  5. 两条曲线所围成的面积_三个视频搞定:求曲边梯形面积的思想、微积分基本定理及其几何意义、微积分理论的可视化解读、...
  6. treelist自动定位行_国内首创!金川集团千米深井双定位补偿摇台投用
  7. mx2 android os耗电,魅族MX3 Flyme OS 3.2充电慢、耗电快问题的解决方法详解
  8. 怎么让qt发声_第3部分:添加网络字体-让我们的单词发声
  9. React 18 带给我们的惊喜
  10. 三年经验前端社招——丰巢科技