描述

在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i]

样例

样例 1:输入:  [3,4,8,5], backpack size=10输出:  9样例 2:输入:  [2,3,5,7], backpack size=12输出:  12
/// 背包问题
/// 记忆化搜索
/// 时间复杂度: O(n * C) 其中n为物品个数; C为背包容积
/// 空间复杂度: O(n * C)
public class Solution1 {private int[][] memo;public int knapsack01(int[] w, int[] v, int C){if(w == null || v == null || w.length != v.length)throw new IllegalArgumentException("Invalid w or v");if(C < 0)throw new IllegalArgumentException("C must be greater or equal to zero.");int n = w.length;if(n == 0 || C == 0)return 0;memo = new int[n][C + 1];return bestValue(w, v, n - 1, C);}// 用 [0...index]的物品,填充容积为c的背包的最大价值private int bestValue(int[] w, int[] v, int index, int c){if(c <= 0 || index < 0)return 0;if(memo[index][c] != -1)return memo[index][c];int res = bestValue(w, v, index-1, c);if(c >= w[index])res = Math.max(res, v[index] + bestValue(w, v, index - 1, c - w[index]));return memo[index][c] = res;}public static void main(String[] args) {}}
/// 背包问题
/// 动态规划
/// 时间复杂度: O(n * C) 其中n为物品个数; C为背包容积
/// 空间复杂度: O(n * C)
public class Solution2 {public int knapsack01(int[] w, int[] v, int C){if(w == null || v == null || w.length != v.length)throw new IllegalArgumentException("Invalid w or v");if(C < 0)throw new IllegalArgumentException("C must be greater or equal to zero.");int n = w.length;if(n == 0 || C == 0)return 0;int[][] memo = new int[n][C + 1];for(int j = 0 ; j <= C ; j ++)memo[0][j] = (j >= w[0] ? v[0] : 0 );for(int i = 1 ; i < n ; i ++)for(int j = 0 ; j <= C ; j ++){memo[i][j] = memo[i-1][j];if(j >= w[i])memo[i][j] = Math.max(memo[i][j], v[i] + memo[i - 1][j - w[i]]);}return memo[n - 1][C];}public static void main(String[] args) {}
}

LintCode 92.背包问题相关推荐

  1. LintCode 563. 背包问题 V(DP)

    1. 题目 给出 n 个物品, 以及一个数组, nums[i] 代表第i个物品的大小, 保证大小均为正数, 正整数 target 表示背包的大小, 找到能填满背包的方案数. 每一个物品只能使用一次 样 ...

  2. LintCode 125. 背包问题 II(DP)

    1. 题目 有 n 个物品和一个大小为 m 的背包. 给定数组 A 表示每个物品的大小 数组 V 表示每个物品的价值. 问最多能装入背包的总价值是多大? 样例 1: 输入: m = 10, A = [ ...

  3. LintCode 92: Backpack (经典背包DP题)

    Backpack 中文English Given n items with size Ai, an integer m denotes the size of a backpack. How full ...

  4. LintCode解题目录

    看见 LintCode 的代码能力测试CAT(Coding Ability Test)挺好,有倒计时,挺有面试紧迫感.做个记录. 另有本人 LeetCode解题目录.<程序员面试金典>解题 ...

  5. DP基本问题总结(2018.5.29 2018.6.9 2018.8.9更新)

    参考文献: [1]https://segmentfault.com/a/1190000006325321 [2]https://blog.csdn.net/q623702748/article/det ...

  6. 今天老夫就把完全背包的底裤给你扒出来瞅瞅!!!

    来我房里有些好康的,来看看完全背包的底裤 完全背包 双重for循环遍历顺序再探 C++测试代码 总结 最后再啰嗦一下,稍微总结一下完全背包需要的注意事项 完全背包 有N件物品和一个最多能背重量为W的背 ...

  7. 【Lintcode】92. Backpack

    题目地址: https://www.lintcode.com/problem/backpack/description 背包问题.给定一个数组AAA代表每个物品的体积,和一个容积sss,问最多能塞满多 ...

  8. 799 - 背包问题VIII - LintCode

    描述 给一些不同价值和数量的硬币.找出[1,n]范围内的总值有多少种形成方式? 题目链接:https://www.lintcode.com/problem/799/ 方法一:递归 #include & ...

  9. 798 - 背包问题VII - LintCode

    描述 假设你身上有 n 元,超市里有多种大米可以选择,每种大米都是袋装的,必须整袋购买,给出每种大米的重量,价格以及数量,求最多能买多少公斤的大米 题目链接:https://www.lintcode. ...

最新文章

  1. 2021年九月最新Java面试必背八股文,338道最新大厂架构面试题
  2. 利用 RDA5807的RSSI测量RF强度
  3. Oracle GoldenGate Logdump工具简要说明
  4. Windows Server 笔记之备份与灾难恢复
  5. cobalt strick 4.0系列教程(3)---数据管理
  6. vue 组件需要注意的事项:
  7. python扫描字符串文本时下线_SyntaxError:扫描字符串文本Python calcun时的EOL
  8. uva 1585 Score(Uva-1585)
  9. NPAPI最简单的代码
  10. git学习笔记-(12-git后悔药-1)
  11. QT高级编程技巧(二)-- 编写多线程和并发应用
  12. MySQL数据库介绍
  13. 阅读《经济学人》,学会这样查词典,从此英语学习不求人
  14. android fastboot 刷机教程,已进入fastboot怎么刷机教程
  15. jzoj 5850.【NOIP提高组模拟2018.8.25】e 可持久化线段树+lca
  16. 【C++】公积金贷款计算器
  17. 等保测评(windows)
  18. DLL文件是怎么产生的,DLL文件是什么,DLL文件有什么用
  19. DRM标准学习笔记1
  20. CorelDRAW VBA - 将文档保存或另存为X4版本

热门文章

  1. 针对教育和软件行业的多平台Java勒索软件分析
  2. 格密码初步学习记录(三)SVP
  3. LiveNVR传统视频监控互联网无插件-按需直播最大利用有效上行
  4. python分析出nba球员的位置_【圆老司】用python展示NBA球员出手位置偏好
  5. web基础(一)——初识HTML5
  6. Java EasyPoi简单报表+复合表头报表的导出
  7. 牛批了,python也能做思维导图
  8. 针织毛衫的概念及设计
  9. IDEA惊天bug:进程已结束,退出代码-1073741819 (0xC0000005)
  10. tomcat启动异常:A child container failed during start