背包恰好装满和不必装满的初始化区别

背包恰好装满和不必装满的初始化区别

1.4 初始化的细节问题我们看到的求最优解的背包问题题目中,事实上有两种不太相同的问法。有的题目要求“恰好装满背包”时的最优解,有的题目则并没有要求必须把背包装满。一种区别这两种问法的实现方法是在初始化的时候有所不同。

如果是第一种问法,要求恰好装满背包,那么在初始化时除了 F [0] 为 0,其它F [1::V ] 均设为 ?1,这样就可以保证最终得到的 F [V ] 是一种恰好装满背包的最优解。

如果并没有要求必须把背包装满,而是只希望价格尽量大,初始化时应该将 F [0::V ]全部设为 0。

这是为什么呢?可以这样理解:初始化的 F 数组事实上就是在没有任何物品可以放入背包时的合法状态。如果要求背包恰好装满,那么此时只有容量为 0 的背包可以在什么也不装且价值为 0 的情况下被“恰好装满”,其它容量的背包均没有合法的解,属于未定义的状态,应该被赋值为 -∞ 了。如果背包并非必须被装满,那么任何容量的背包都有一个合法解“什么都不装”,这个解的价值为 0,所以初始时状态的值也就全部为 0了。

原文地址:https://www.cnblogs.com/Roni-i/p/9047505.html

时间: 2024-10-10 04:28:40

背包恰好装满和不必装满的初始化区别的相关文章

TOJ礼品兑换 (多重背包恰好装满)

近期crq老师为了提高各个学生对ACM的兴趣,在TOJ上增加了积分制度和礼品兑换功能, TOJ的积分是来之不易的,固然同学们都想用同一积分换取最大价值的礼品,某同学用了M的积分换取了一些礼品. 请问:他用M的积分最多能换取多少价值的礼品呢? (积分M一定要使用完) 输入 输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数M和N(1<=M<=1000,1<=N<=100),分别表示换取的总积分和礼品的种类,然后是N行数据,每行包含3个数p,h和c(1&l

分辣条-01背包恰好装满情况

分辣条 发布时间: 2016年6月26日 20:36   最后更新: 2016年6月26日 20:37   时间限制: 1000ms   内存限制: 128M 描述 "你喝的酸奶是我买的,辣条也是我买的,你现在要跟我分手,你把我当什么?" "因为你每次分辣条的时候都比我多一根!" 可见分好辣条是一件多么重要的事情.. 现在有n(1<=n<=200)根辣条,每根辣条的重量为a1,a2...ai..an(1<=ai<=100). 那么能不能把这些

数组 在 c++, java, c#中的 定义、初始化 区别 中括号的位置

来自"http://www.cnblogs.com/Yogurshine/archive/2012/12/29/2839238.html" (1)Java 一维数组 1) int[] a; //声明,没有初始化 2) int[] a=new int[5]; //初始化为默认值,int型为0 3) int[] a={1,2,3,4,5}; //初始化为给定值 4) int[] a=new int[]{1,2,3,4,5}; //同(3) int[] a=new int[5]{1,2,3,

选择awake和Start的初始化区别

由来: 在匆匆找Unity工作的时候, 考官问我一般写初始化值的时候, 你写在那个方法里面!我心中一直出现awake和Start,于是我想说awake方法. 但是我不会读....我问他能不能写出来他还是答应了我的要求,我就快乐的写在纸上给了他. 经过一轮探讨他就叫我回家等通知吧. 前提: 先不谈论awake方法可以调解他的执行时间!    GameObject是一个树形结构,从上到下, 先从最根的组件awake方法以此向下执行,之后同理在执行Start方法.并不是执行完一个Awake,Start

题解报告:NYOJ #311完全背包(恰好装满)

描述: 直接说题意,完全背包定义有N种物品和一个容量为V的背包,每种物品都有无限件可用.第i种物品的体积是c,价值是w.求解将哪些物品装入背包可使这些物品的体积总和不超过背包容量,且价值总和最大.本题要求是背包恰好装满背包时,求出最大价值总和是多少.如果不能恰好装满背包,输出NO. 输入: 第一行: N 表示有多少组测试数据(N<7). 接下来每组测试数据的第一行有两个整数M,V. M表示物品种类的数目,V表示背包的总容量.(0<M<=2000,0<V<=50000)接下来的

uva10465(完全背包,要求装满背包)

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=114&problem=1406&mosmsg=Submission+received+with+ID+15392606 给我们两个物品的费用,和一个背包的容量 要求我们使得背包容量浪费最少的情况下,选尽可能多的物品 即要求装满背包的完全背包问题,只要注意初始化就可以了, 将d

01背包初始化的细节问题与循环下限的改进

转自:背包久讲 Tianyi Cui 初始化的细节问题 我们看到的求最优解的背包问题题目中,事实上有两种不太相同的问法.有的题目要求“恰好装满背包”时的最优解,有的题目则并没有要求必须把背包装满.一种区别这两种问法的实现方法是在初始化的时候有所不同. 如果是第一种问法,要求恰好装满背包,那么在初始化时除了f[0]为0其它f[1..V]均设为-∞,这样就可以保证最终得到的f[N]是一种恰好装满背包的最优解. 如果并没有要求必须把背包装满,而是只希望价格尽量大,初始化时应该将f[0..V]全部设为0

三种背包的模板

01:http://www.ahathinking.com/archives/95.html 0-1背包 2012年4月30日Yx.Ac发表评论阅读评论 文章作者:Yx.Ac   文章来源:勇幸|Thinking (http://www.ahathinking.com)   转载请注明,谢谢合作. --- 四月份还没写,不能这么荒废了呀,赶紧水一篇吧,哈哈.前些日子回顾了DP的一些基础,就做一下整理吧,从0-1背包开始. 本节回顾0-1背包的基本模型,关于它的实现有很多种写法,这里对不同实现做个

nyist oj 311 全然背包 (动态规划经典题)

全然背包 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 直接说题意,全然背包定义有N种物品和一个容量为V的背包.每种物品都有无限件可用.第i种物品的体积是c,价值是w. 求解将哪些物品装入背包可使这些物品的体积总和不超过背包容量,且价值总和最大.本题要求是背包恰好装满背包时,求出最大价值总和是多少. 假设不能恰好装满背包,输出NO 输入 第一行: N 表示有多少组測试数据(N<7). 接下来每组測试数据的第一行有两个整数M.V. M表示物品种类的数目,V表示背