dp专题12 多重背包问题的二进制优化
dp专题12 多重背包问题的二进制优化
原创 已于 2024-01-16 15:00:39 修改 · 粉丝可见 · 524 阅读 · 9 · 7 · 本内容遵循CC 4.0 BY-SA版权协议 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 GEO检测 · 编辑
文章链接:https://blog.csdn.net/hacker_51/article/details/135606101
本题链接: 5. 多重背包问题 II - AcWing题库
题目:

样例:
cobol<br/>4 5<br/>1 2 3<br/>2 4 1<br/>3 4 3<br/>4 5 2<br/> |
|---|
| 10 |
|---|
思路:
对于朴素版的多重背包问题DP,由于朴素版的多重背包问题DP是三层循环,所以合适范围数据范围是在100左右,当数据范围再多 一个 10倍的时候,朴素版的多重背包问题就会 TLE 了。
朴素版的多重背包问题,原理的三层循环中,有一层循环是作为取多少个当前这个物品的原理,达到完成dp状态的转移。
我们二进制优化这个朴素版的多重背包问题,就是优化掉我们 取多少个当前这个物品 的这一层循环。
至于为什么要用二进制来优化呢?
这是因为,我们取物品的时候,就有取这个物品,和不取两种操作,其中 核心在于取多少个为合适, 二进制中各位是由 1248... 巧妙的分成了多个部分,每一部分的组合就可以到达我们预期。
比如:
| 目标取 的个数 | 各位组合 |
|---|---|
| 1 | 1 |
| 2 | 2 |
| 3 | 1 + 2 |
| 4 | 4 |
| 5 | 1 + 4 |
| 6 | 2 + 4 |
| 7 | 1 + 2 + 4 |
所以我们可以将物品的数量分成二进制位的组合作为新一个物品。
代码详解如下:
1 | |
最后提交:

觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭
wechat pay
ali pay
dp专题12 多重背包问题的二进制优化
http://blog.angindem.cn/2024/01/16/Angindem-CSDN博客/122_122/