【算法】01背包问题
来源:互联网 发布:300mw机组造价数据 编辑:程序博客网 时间:2024/05/17 08:09
01背包问题
- 01背包问题
- 什么是01背包问题
- 模拟01背包问题纠错
- 正解
什么是01背包问题
01背包问题得名于其性质:一个物品放进一个背包只有取和不取两种选择,取就是1,不取就是0,便得名01背包。
模板题目:有n个物品,放进一个容量v的背包中,求出其最小剩余量是多少。
这就是非常典型的01背包问题,那么如何实现呢?
我们可以定义一个数组dp[v]来表示当容量为v时是否存在解,设item为当前决策中物品,易得dp[j]=max(dp[j-item],dp[j]),假设我们有一个容量为6的背包,有1、3、5三个物品,就有这段代码:
void dp_01(){ int i,j; dp[0]=1; for(i=1;i<=totitem;++i) { for(j=item[j];j<=weight;--j) { if(dp[j-item[i]]==true) { dp[j]=true; } } }}
模拟01背包问题+纠错
好的咱们跑一遍
选择1为当前物品,可以更改dp[1]
等等?dp[2-1]=1?dp[2]也可以等于1?怎么可能?
好吧,因为咱们的循环出了点问题,把之前做过的决策又当了证据了。因此只要改一下代码:
正解
void dp_01(){ int i,j; dp[0]=1; for(i=1;i<=totitem;++i) { for(j=weight;j>=item[j];--j) { if(dp[j-item[i]]==true) { dp[j]=true; } } }}
没有修改了
这就是正解
阅读全文
0 0
- [算法]01背包问题
- 【算法】01背包问题
- 01背包问题 原理 算法
- 回溯算法---01背包问题
- 算法之01背包问题
- 【算法题】01背包问题
- 算法——背包问题 01背包+完全背包+多重背包
- [算法系列之二十九][背包问题]01背包
- 【算法】01背包问题的Java实现
- 01背包问题(回溯算法实现)
- 01背包问题几种算法实现
- 算法练习-NOJ-1004-01背包问题
- 01背包问题(回溯算法实现)
- 01背包问题的动态规划算法
- 基因算法解决01背包问题
- 算法训练 装箱问题(01背包)
- 动态规划算法之01背包问题
- 动态规划算法-解决01背包问题
- 左神面试算法整理--二叉搜索数最大拓扑结构
- 6alert消息对话框
- QuickFindChildAndComponent (Unity快速找孩子的组件)
- 我的第一个窗口
- <unity>关于快速的数据读取和存储——JSON(qwq)
- 【算法】01背包问题
- Lintcode 跳跃游戏
- FZU
- 百度面试经历
- 深入理解游戏中寻路算法
- C语言之数组队列
- dfs遍历螺旋矩阵
- [LeetCode]303. Range Sum Query
- web项目与微信对接报错误码48002 Api禁用(一般是管理组类型与Api不匹配,例如普通管理组调用会话服务的Api)