题目地址:

https://www.lintcode.com/problem/backpack/description

背包问题。给定一个数组AAA代表每个物品的体积,和一个容积sss,问最多能塞满多少容积。

思路是动态规划。设f[i][j]f[i][j]f[i][j]是从A[0:i]A[0:i]A[0:i]这些物品里选,要塞进容积jjj,最多能塞多少容积。那么有两种情况:
1、不放A[i]A[i]A[i]件物品,那么最多塞的容积是f[i−1][j]f[i-1][j]f[i−1][j];
2、放第iii件物品,那么最多塞的容积是f[i−1][j−A[i]]+A[i]f[i-1][j-A[i]]+A[i]f[i−1][j−A[i]]+A[i]。
所以只需要比较这两者谁大即可,即f[i][j]=max⁡{f[i−1][j],f[i−1][j−A[i]]+A[i]}f[i][j]=\max\{f[i-1][j],f[i-1][j-A[i]]+A[i]\}f[i][j]=max{f[i−1][j],f[i−1][j−A[i]]+A[i]}最后返回f[lA−1][s]f[l_A-1][s]f[lA​−1][s]代码如下:

public class Solution {/*** @param m: An integer m denotes the size of a backpack* @param A: Given n items with size A[i]* @return: The maximum size*/public int backPack(int m, int[] A) {// write your code hereif (A == null || A.length == 0) {return 0;}// dp[i][j]表示从A[0, ..., i]中拿若干物品塞进容积为j的背包,最多能塞多少体积int[][] dp = new int[A.length][m + 1];// 初始化第0行for (int j = A[0]; j <= m; j++) {dp[0][j] = A[0];}for (int i = 1; i < A.length; i++) {for (int j = 0; j <= m; j++) {dp[i][j] = dp[i - 1][j];if (j >= A[i]) {dp[i][j] = Math.max(dp[i][j], dp[i - 1][j - A[i]] + A[i]);}}}return dp[A.length - 1][m];}
}

时空复杂度O(lAs)O(l_As)O(lA​s)。

接下来考虑空间优化。注意到每次计算f[i][j]f[i][j]f[i][j]的时候,只用到了上一行正上方的元素,和上一行的左边的元素。所以考虑以行滚动更新。注意在更新列的时候,需要从右向左更新。

public class Solution {/*** @param m: An integer m denotes the size of a backpack* @param A: Given n items with size A[i]* @return: The maximum size*/public int backPack(int m, int[] A) {// write your code hereif (A == null || A.length == 0) {return 0;}int[] dp = new int[m + 1];for (int j = A[0]; j <= m; j++) {dp[j] = A[0];}for (int i = 1; i < A.length; i++) {for (int j = m; j >= A[i]; j--) {dp[j] = Math.max(dp[j], dp[j - A[i]] + A[i]);}}return dp[m];}
}

时间复杂度不变,空间变为O(s)O(s)O(s)。

【Lintcode】92. Backpack相关推荐

  1. 【Lintcode】125. Backpack II

    题目地址: http://www.lintcode.com/problem/backpack-ii/description 0−10-10−1背包问题,AAA表示物品体积,VVV表示物品价值,背包容量 ...

  2. 【Lintcode】562. Backpack IV

    题目地址: https://www.lintcode.com/problem/backpack-iv/description 给定一个数组AAA,代表每个物品的体积,题目保证AAA里的数全是正数并且没 ...

  3. 【LintCode】算法题 1443. 最长AB子串

    描述 给你一个只由字母'A'和'B'组成的字符串s,找一个最长的子串,要求这个子串里面'A'和'B'的数目相等,输出该子串的长度. 这个子串可以为空. s的长度n满足 2<=n<=1000 ...

  4. 【Lintcode】1382 · High Capacity Backpack

    题目地址: https://www.lintcode.com/problem/1382/description 给定一个背包,容量sss,再给定nnn个物品,各自体积是c[i]c[i]c[i],各自价 ...

  5. 【LintCode】Backpack 背包问题

    在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i]. 样例 如果有4个物品[2, 3, 5, 7] 如果背包的大小为11,可以选择[2, 3, 5]装入背包, ...

  6. 【lintcode】树形数据结构之Maxtree, Tree iterator, remove bst node, 优先队列之动态中位数Median, 矩阵dfs之word search II,最大连

    解析 max ksubarray sum:  最大和 of 连续子序列 =>   最大和 of  k份连续子序列 属于dp,30行代码搞定,注意一些边界. substr diff:  无queu ...

  7. 【Lintcode】1413. Tree

    题目地址: https://www.lintcode.com/problem/tree/description 给定一个无向图,其有树性质,并且顶点编号为111的为树根(也就是这个图是个有根树).要求 ...

  8. 【Lintcode】1645. Least Subsequences

    题目地址: https://www.lintcode.com/problem/1645/ 给定一个长nnn的数组AAA,问AAA最少能分解为多少个严格递减的子序列之并. 在AAA上定义偏序关系< ...

  9. 【Lintcode】1375. Substring With At Least K Distinct Characters

    题目地址: https://www.lintcode.com/problem/substring-with-at-least-k-distinct-characters/description 给定一 ...

最新文章

  1. 小蓝发布带屏幕的单车,瞄准精准广告媒体平台
  2. 计算当前时间对应的本周一、上周一
  3. MongoDB之Hadoop驱动介绍
  4. 浅谈各种数据库连接池
  5. How is target My note application rendered - renderManager
  6. 最长回文子串_【每日编程142期】最长回文子串II
  7. 微信小程序 - 授权页面
  8. asp activex 读取服务器上的文件,webshell中上传asp文件调用服务器ActiveX控件溢出获取shell...
  9. perf-perf stat用户层代码分析
  10. plist java_帮助plist文件
  11. android 字体淡入淡出,如何让文字在Android中淡入淡出?
  12. MySQL索引. ref_mysql中索引利用情况(explain用法)
  13. 真会玩!竟然可以这样用IDEA通过数据库生成lombok版的POJO...
  14. IS-IS hello 包结构及邻接关系的建立
  15. Linux下命令积累
  16. Activemq配置文件详解
  17. 最小的操作系统MenuetOS
  18. 逆势而上,Intel大连工厂高价挖人
  19. imx6ull用video4linux,CB140(imx6ull)使用Openwrt系统
  20. 【已解决】terminate called after throwing an instance of ‘cv::Exception‘,已放弃 (核心已转储)

热门文章

  1. 2021年全球最具吸引力的雇主:谷歌、微软、苹果占据前三名
  2. android 存储盘 dcim,什么是DCIM?手机照片的存储路径
  3. R plotly包函数的使用 plot_ly(),add_trace(),layout()
  4. 一枚程序媛的java人生—2018年年终总结
  5. matlab2012卸载,matlab2012一些函数删除后的替代解决方法及用到操作
  6. 2017年衢州联赛 T2
  7. Kubernetes 1.5通过Ceph实现有状态容器
  8. 魅族手机怎么开启smart lock功能
  9. 大连海事大学信息与通信工程系808考研上岸经验分享
  10. MATLAB下载处理.nii文件资源包(NIfTI_20140122zip)