01背包问题详解
来源:互联网 发布:少儿编程培训班费用 编辑:程序博客网 时间:2024/05/21 10:59
N个物品,每个物品有一个wi的重量和pi的价值,现在有一个重W的背包问放进物品后的最大值。
//首先是记忆化搜索//dp[i][j] 在前i件物品里面选择不超过重量j的最大价值int rec(int i, int j){ if(dp[i][j] >= 0) //在此之前需要memset(dp, -1, sizeof(dp)) return dp[i][j]; int res; if(i == n) res = 0; //没有物品选择了 else if(j < w[i]) //当前重量无法装下第i件物品 res = rec(i + 1, j); else res = max(rec(i + 1, j), rec(i + 1, j - w[i]) + p[i]); return res = dp[i][j];}
基于上面的思想我们有递推式
根据递推式有
int ZeroOnePack(){ memset(dp, 0, sizeof(dp)); for(int i = 0; i < n; ++i) for(int j = 0; j <= W; ++j) dp[i + 1][j] = j >= w[i]? max(dp[i][j], dp[i][j - w[i]] + p[i]) : dp[i][j]; return dp[n][W];}
这样的话时间复杂度和空间复杂度都是O(nW) 可以对空间复杂度进行优化有
for(int i = 0; i < n; ++i) for(int j = W; j >= w[i]; --j) dp[j] = max(dp[j], dp[j-w[i]]);
0 0
- 01背包问题详解
- 01背包问题详解
- 01背包问题详解
- 背包问题详解:01背包、完全背包、多重背包
- 01背包问题吐血详解
- 01背包问题动态规划详解
- 01背包问题---动态规划详解
- 01背包问题详解(转载)
- 背包问题详解
- 背包问题系列详解
- 背包问题详解
- 各种背包问题详解
- 背包问题详解
- 背包问题详解
- 背包问题 新手详解
- 背包问题---01背包
- 背包问题(0-1背包、完全背包、多重背包)详解
- 背包问题 01背包详解及其实现 空间压缩技术 对应于背包九讲之一
- apache thrift介绍与实例
- myBatis
- 蓝桥杯 凑平方数
- mysql批量插入数据量过大报错解决办法
- spring-boot 入门(一)
- 01背包问题详解
- C 的|、||、&、&&、异或、~、!运算
- java导出txt文件列对齐
- 架构漫谈(六):软件架构到底是要解决什么问题?
- 线性表
- 用tensorflow改写个网络碰到的各种异常问题(数据集cifar)
- oracle的闪回查询、闪回表、闪回数据库
- Swift类型属性
- Extjs中grid 的ColumnModel 属性配置