动态规划解背包问题

原创 2018年04月15日 21:05:38

甲打算出去旅游,被告知最多可携带20公斤重的行李,已知甲想带的5件行李的重量及其在旅行中产生的效益如下表所示

行李编号

1

2

3

4

5

重量/千克

6

4

8

8

4

行李效益

8

4

8

10

2

为使所带的行李在旅行中产生最大的效益,请问甲应该带哪几件行李?

要求:请用表示从前i个行李中取出行李,并装入剩余负重为j的行李箱时所带来的最大效益。


算法设计思路

此问题可采用动态规划算法解决,首先创建functionE函数(形参为物品的个数n,背包的容量c,存有各个物品的重量的数组w,以及存放每件行李的效益的数组e),通过传入数据,将装入背包的行李数规模逐渐增大,直到产生最大效益。在过程中只会产生将当前行李装进去或者不装进去两种情况。如果行李的重量小于当前背包的容量则选择将行李装进背包或者不装进背包中产生效益最大的一中操作,如果大于则有可选行李数增加一但是背包的效益不变化。

import java.util.Scanner;
 
public class 动态规划解背包问题 {

static int n;//行李件数
static int c;//背包容量
static int w[] ;//行李重量
static int e[] ;//行李效益
static int [][]V ;

public static void functionE(int n,int c,int w[],int e[]) {
for(int i=1;i<=n;i++) {//行李编号从1开始
for(int j=0;j<=c;j++) {
if(i==0||j==0) {//当可选行李为0或者背包剩余容量为0时,产生的效益为0
V[i][j]=0;
}
if(j>w[i]) {//背包的剩余容量大于行李的重量,选择将装进背包或者不装进背包中产生效益最大的方式
V[i][j]=Math.max(V[i-1][j-w[i]]+e[i],V[i-1][j]);
}
else {//背包的剩余容量小于行李的重量,不能装进背包
V[i][j]=V[i-1][j];
}
}
}
}

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
n = in.nextInt();
c = in.nextInt();
w = new int[n+1];
e = new int[n+1];
V = new int [n+1][c+1];
for(int i=1;i<=n;i++) {
w[i]=in.nextInt();
e[i]=in.nextInt();
}
functionE(n,c,w,e);
System.out.println(V[n][c]);
}
}


背包问题九讲(非常不错的动态规划讲解,搞ACM必备)

  • 2010年02月10日 11:42
  • 38KB
  • 下载

动态规划01背包问题的详细解释,看了不会你打我

  • 2012年04月15日 21:32
  • 914KB
  • 下载

用动态规划算法解决0-1背包问题

用动态规划算法解决0-1背包问题需要了解以下基本概念和原理: 1.使用动态规划算法必须具备两个基本要素:最优子结构性质和重叠子问题性质 2.动态规划算法常以自底向上的方式计算最优值,也就是说,从最...
  • qq_24059821
  • qq_24059821
  • 2016-04-30 21:44:25
  • 6266

一步一步看清动态规划----背包问题(java解)

动态规划的思想就是利用 空间换时间,开辟独立的空间存储最优子解,**求新问题解=子问题+状态转移**,这样可以避免掉对于子问题的重复计算。在动态规划中,状态和状态转移方程式很重要的。...
  • sinat_34022298
  • sinat_34022298
  • 2017-08-28 20:18:32
  • 750

动态规划法解决0-1背包问题

  • 2015年03月14日 19:49
  • 787B
  • 下载

总结——01背包问题 (动态规划算法)

0-1 背包问题:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。 问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?...
  • xp731574722
  • xp731574722
  • 2017-04-25 20:57:57
  • 23224

动态规划之详细分析0-1背包问题

题目:   有 N 件物品和一个容量为 V 的背包。第 i 件物品的费用是 w[i],价值是 p[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。   本文按照动态规...
  • Hearthougan
  • Hearthougan
  • 2016-12-26 01:50:32
  • 5550

动态规划—0-1背包问题(最易理解的讲解)

0-1背包问题是最广为人知的动态规划问题之一,拥有很多变形。尽管在理解之后并不难写出程序,但初学者往往需要较多的时间才能掌握它。小编写这篇文章力争做到用通俗易懂的语言,最少的公式把0-1背包问题讲解透...
  • u010293698
  • u010293698
  • 2015-10-08 22:50:34
  • 3379

动态规划和贪心算法之背包问题理解

一.背包问题引用书上关于0-1背包和部分背包的阐述: 二.贪心与动态规划区别关于红色矩形部分解释为什么0-1不能使用贪心算法,是因为当你选择一个物品时,整个物品的大小都需要计算,然而背包的的大小...
  • qq_16234613
  • qq_16234613
  • 2016-08-17 21:55:05
  • 6835

背包问题,动态规划求解,matlab代码,c++代码

最近写论文接触到背包问题,查阅网上一些资料,对于简单的0-1背包问题,动态规划算法可以求解,最近花时间整理整理。...
  • robert_chen1988
  • robert_chen1988
  • 2016-09-08 16:42:19
  • 3594
收藏助手
不良信息举报
您举报文章:动态规划解背包问题
举报原因:
原因补充:

(最多只允许输入30个字)