描述

在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. Gartner:大数据和BI商业智能的差别和影响
  2. MVC之排球比赛计分程序 ——(二)架构概要设计
  3. jquery实现单击div切换背景,再次单击回到原来样式
  4. SpringBoot项目在启动时出现了Cannot determine embedded database driver class for database type NONE 错误
  5. 组合导航:中海达iNAV2产品描述及接口描述
  6. joomla人人登录
  7. MySQL项目练习2——员工信息表项目
  8. RealSense 图形识别之路 1.0
  9. spark another attempt succeeded
  10. NRF52832-USB-Dangle-DIY笔记
  11. walking机器人仿真教程-查看仿真环境相关话题
  12. 编程思想-编程范式-编程思想是一组世界观和方法论-(初识范式——程序王国中的世界观与方法论)...
  13. matlab2014b与carsim8.02联合仿真可能遇到的问题
  14. 脑机接口-常用的MATLAB函数
  15. 数据科学-描述性统计
  16. Oulipo (KMP算法)
  17. Oracle数据库,停止正在执行的package
  18. Result统一响应数据
  19. JQuery EasyUI(22)
  20. android 事件机制总结

热门文章

  1. 用python完成选股策略_python量化选股策略_量化股市
  2. java微信机器人_Java版微信机器人代码
  3. 深度学习CPU版本环境搭建(从anaconda->pycharm->tensorflow)
  4. Camera-ISP DP/DM/EE/NR/CR
  5. 天钰原装FP6606ACAP6芯片,仅5V至20V VBUS电源,过电压保护
  6. 软件测试【网络经典面试题】面经分享
  7. MTK6735 android 驱动修改模块
  8. 2.5W 字详解线程与锁了,面试随便问!!
  9. rsa私钥 txt转化为pem格式
  10. 双非硕士阿里大数据开发面经(已拿offer)(建议收藏)