backpack ii
来源:互联网 发布:阿里在线编程测验 编辑:程序博客网 时间:2024/05/17 22:46
中等 背包问题 II
给出n个物品的体积A[i]和其价值V[i],将他们装入一个大小为m的背包,最多能装入的总价值有多大?
您在真实的面试中是否遇到过这个题?对于物品体积[2, 3, 5, 7]和对应的价值[1, 5, 2, 4], 假设背包大小为10的话,最大能够装入的价值为9。
A[i], V[i], n, m均为整数。你不能将物品进行切分。你所挑选的物品总体积需要小于等于给定的m。
public class Solution { /** * @param m: An integer m denotes the size of a backpack * @param A & V: Given n items with size A[i] and value V[i] * @return: The maximum value */ public int backPackII(int m, int[] A, int V[]) { int[] dp = new int[m+1]; int ret = 0; for(int i=0;i<A.length;i++) { for(int j=m;j>=A[i];j--) { //dp[j]:背包大小为j,前i个物品(0~i-1)可以选时的maxValue //dp[j-A[i]]:背包大小为j-A[i]时,前i个物品(0~i-1)可以选时的maxValue //dp[j-A[i]] + V[i]:放入第i个物品时的maxValue //max(dp[j],dp[j-A[i]]+V[i]):第i个物品到底要不要放进背包 dp[j] = Math.max(dp[j],dp[j-A[i]]+V[i]); ret = Math.max(ret,dp[j]); } } return ret; }}
背包问题详解(转)(http://blog.csdn.net/mu399/article/details/7722810 )
01背包问题,是用来介绍动态规划算法最经典的例子,网上关于01背包问题的讲解也很多,我写这篇文章力争做到用最简单的方式,最少的公式把01背包问题讲解透彻。
01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,j] }
题目描述:
有编号分别为a,b,c,d,e的五件物品,它们的重量分别是2,2,6,5,4,它们的价值分别是6,3,5,4,6,现在给你个承重为10的背包,如何让背包里装入的物品具有最大的价值总和?
只要你能通过找规律手工填写出上面这张表就算理解了01背包的动态规划算法。
首先要明确这张表是至底向上,从左到右生成的。
为了叙述方便,用e2单元格表示e行2列的单元格,这个单元格的意义是用来表示只有物品e时,有个承重为2的背包,那么这个背包的最大价值是0,因为e物品的重量是4,背包装不了。
对于d2单元格,表示只有物品e,d时,承重为2的背包,所能装入的最大价值,仍然是0,因为物品e,d都不是这个背包能装的。
同理,c2=0,b2=3,a2=6。
对于承重为8的背包,a8=15,是怎么得出的呢?
根据01背包的状态转换方程,需要考察两个值,
一个是f[i-1,j],对于这个例子来说就是b8的值9,另一个是f[i-1,j-Wi]+Pi;
在这里,
f[i-1,j]表示我有一个承重为8的背包,当只有物品b,c,d,e四件可选时,这个背包能装入的最大价值
f[i-1,j-Wi]表示我有一个承重为6的背包(等于当前背包承重减去物品a的重量),当只有物品b,c,d,e四件可选时,这个背包能装入的最大价值
f[i-1,j-Wi]就是指单元格b6,值为9,Pi指的是a物品的价值,即6
由于f[i-1,j-Wi]+Pi = 9 + 6 = 15 大于f[i-1,j] = 9,所以物品a应该放入承重为8的背包
- backpack ii
- backpack-ii
- Lintcode - Backpack II
- [刷题]Backpack II
- 动态规划------Backpack II
- #125 Backpack II
- Backpack II 解题报告
- 【LintCode】 Backpack II 背包问题II
- LintCode Backpack II(背包II)
- Backpack
- backpack
- backpack
- backpack
- Backpack
- 125.Backpack II-背包问题 II(中等题)
- [刷题]Backpack
- DP -----Backpack
- lintcode:Backpack
- Ubuntu下配置samba服务器
- 第四章t1
- Windows下Qt5环境搭建
- 【Scrapy】Spiders爬虫
- 深入Java集合学习系列:HashMap的实现原理
- backpack ii
- 在SQL Server中快速删除重复记录
- hdu 1576 A/B
- 存储过程调存储过程实例
- 第四章t2
- 进程、线程小结(1)
- 石子合并问题
- 【Unity】Unity中影响性能的几个因素
- 【leetcode】 Bitwise AND of Numbers Range