“恰好装满求最值”背包问题的初始化解析
【问题描述】
不同于普通的没有“恰好装满”约束的背包问题,有时我们会遇到“恰好装满求最值”的背包问题。怎么求解?
其实,也很简单,只需要对普通的没有“恰好装满”约束的背包问题的初始状态进行微调便可。可见,两者在解法上差别不大。
【解决方法】
设 n 为物品种数,V 为背包容量,c[i] 表示容量为 i 的背包能够装的最大价值,vol[i] 为第 i 中物品的容积,val[i] 为第 i 种物品的价值。
现在分情况给出结论:
● 不用恰好装满背包问题的初始化:c[i]=0,其中 0<=i<=V
● 恰好装满求最大值背包问题的初始化:c[0]=0,c[i]=-inf,其中 1<=i<=V
● 恰好装满求最小值背包问题的初始化:c[0]=0,c[i]=inf,其中 1<=i<=V
恰好装满求最小值背包问题的初始化实例可参考 HDU 1114 - Piggy-Bank 的解法:
https://blog.csdn.net/hnjzsyjyj/article/details/126153528
【知识解析】
初始化的 c[] 数组,事实上就是没有任何物品放入背包时的合法状态。
● 如果背包不用恰好装满,那么任何容量的背包都有一个合法状态“什么也不装” ,此时背包的价值为0。故此类问题初始化为“c[i]=0,其中 0<=i<=V”。
● 如果背包恰好装满求最大值,那么此时只有一个合法状态,即容量为0的背包可以在什么也不装的状态下被 “恰好装满” ,此时背包的价值为0。其他容量的背包在“恰好装满求最大值”的约束下均没有合法的解,属于未定义的状态。且由于要求的是最大值,所以都应该被赋值为 −inf 。故此类问题初始化为“c[0]=0,c[i]=-inf,其中 1<=i<=V”。经过计算,若最终c[V]=-inf,则背包不能恰好装满。
● 如果背包恰好装满求最小值,那么此时只有一个合法状态,即容量为0的背包可以在什么也不装的状态下被 “恰好装满” ,此时背包的价值为0。其他容量的背包在“恰好装满求最小值”的约束下均没有合法的解,属于未定义的状态。且由于要求的是最小值,所以都应该被赋值为 inf 。故此类问题初始化为“c[0]=0,c[i]=inf,其中 1<=i<=V”。经过计算,若最终c[V]=inf,则背包不能恰好装满。
【参考文献】
https://blog.csdn.net/Iseno_V/article/details/100697105
https://blog.csdn.net/m0_52043808/article/details/122815072
“恰好装满求最值”背包问题的初始化解析相关推荐
- 变种 背包问题_01背包及其变种(物品无限背包、恰好装满背包)
一.01背包问题 01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为C1,C2,-,Cn,与之相对应的价值为W1,W2,-,Wn.求解将那些物品装入背包可使总价值最大. 动态规划: ...
- 01背包及其变种(物品无限背包、恰好装满背包)
一.01背包问题 01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为C1,C2,-,Cn,与之相对应的价值为W1,W2,-,Wn.求解将那些物品装入背包可使总价值最大. 动态规划: ...
- 【动态规划】完全背包:存钱罐(恰好装满)
背包恰好装满问题: 设有n个物品,其重量(或占用空间)分别为w1, W.,...Wn.价值分别为V1,2....n. ← 给定一个总容量为W的背包,每个物品只能整个放入背包或不放.← 问:如何选择放入 ...
- Python3使用动态规划处理背包问题:完全背包(含背包恰好装满的情况)
文章目录 题目介绍 题解1 题解2 题解3 完全背包问题是基于01背包的,如果对01背包问题不熟悉,可以参考: Python3使用动态规划处理01背包问题 题目介绍 原题链接:NC309 完全背包 描 ...
- 【动态规划笔记】动态规划初始化细节问题:恰好装满背包
求最优解的背包问题中,有的题目要求[恰好装满背包],有的题目并[没有要求]必须把背包装满 实现方法: 初始化有所不同 设:F[i]表示容量为i的背包能够装的最大价值 恰好装满背包: 初始化: F ...
- 01背包问题、完全背包、多重背包、恰好装满
01背包问题:最基本的背包问题,每个物品最多只能放一次. 完全背包问题:每种物品可以放无限多次. 多重背包问题:每种物品有一个固定的次数上限. [代码] import java.util.Scanne ...
- http://www.dewen.net.cn/q/15749/PHP求数组值相加(可重复)等于某值的所有组合
http://www.dewen.net.cn/q/15749/PHP求数组值相加(可重复)等于某值的所有组合 tieGump 1 票 tieGump 8 例如 $data = array(1,2,4 ...
- 01背包的变形问题----背包恰好装满
01背包的变形问题----背包恰好装满 在看本文之前建议先看一下我之前发过的01背包详解. https://blog.csdn.net/Iseno_V/article/details/10000113 ...
- 恰好装满背包、恰好取k倍(取余)
恰好装满背包(取余) 题目情形总结 判断整除 糖果 波动数列 题目情形总结 物品容量恰好等于m (恰好装满背包) 和 取得的糖果数恰好为k的倍数 若要求此时的最大价值,dp数组初始化为负无穷 详细解释 ...
最新文章
- 送餐机器人---取餐完成的确认方式
- Docker / 深入理解的容器和镜像
- mysql键太长_数据库,主键为何不宜太长长长长长长长长?(转)
- 【python】性能分析工具汇总
- commons-fileupload 的详细介绍与使用
- python内置数据结构_Python内置数据结构(一)
- Git学习笔记(2)——版本的回退,和暂存区的理解
- 计算机常见的硬件故障及维护,计算机硬件故障原理及日常维护
- MS17-010(永恒之蓝) 漏洞检测及利用教程
- 图像处理—灰度图像转为伪彩色图像
- 安装vue-cli创建项目的时候 gyp ERR! build error的npm包遇到以下错误
- python中response是什么意思_对python中各个response的使用说明
- 蓝桥杯基础练习合集一(C语言) 1.A+B问题2.数列排序3.十六进制转八进制4.十六进制转十进制5.十进制转十六进制
- python colorbar字体大小_如何更改colorbar上基数和指数的字体大小?
- 如何使用Categories
- “数据结构基础”系列网络课程主页
- 企业如何建立完善的管理体系
- 从微信头像链接下载图片到服务器
- openSUSE15.2收发@aliyun.com电子邮件之thunderbird篇
- 基于STM32的GPS模块驱动(AIR530)