题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602

思路分析:该问题为经典的0-1背包问题;假设状态dp[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值,则可以推导出dp递推公式

dp[i][v] = Max{dp[i-1][v], dp[i-1][v – c[i]] + w[i]};c[i]表示第i件物品的容量,w[i]表示第i件物品的价值;该动态规划问题每个阶段的决策为是否要

选择第i件物品放入背包中,如果不选择第i件物品,则dp[i][v] = dp[i-1][v],如果选择第i件物品放入背包,则dp[i][v] = dp[i-1][v-c[i]], v-c[i] >= 0;

同时,可以使用一维数组递推,因为递推i时,只需要使用到第i-1行的数组元素,所以可以从V向下递推到0,递推公式如下: dp[v] = MAX(dp[v], dp[v - c[i]] + w[i]),

(一维dp)代码如下:

import java.util.*;

public class Main {
static final int MAX_N = 1000 + 10;
static int[] value = new int[MAX_N];
static int[] volumn = new int[MAX_N];
static int[] dp = new int[MAX_N]; public static int Max(int a, int b) {
return a > b ? a : b;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in); int case_times = in.nextInt();
while (case_times-- != 0) {
int N, V; for (int i = 0; i < MAX_N; ++ i)
dp[i] = 0;
N = in.nextInt();
V = in.nextInt();
for (int i = 1; i <= N; ++ i)
value[i] = in.nextInt();
for (int i = 1; i <= N; ++ i)
volumn[i] = in.nextInt();
for (int i = 1; i <= N; ++ i) {
for (int v = V; v >= 0; -- v) {
if (v - volumn[i] >= 0)
dp[v] = Max(dp[v], dp[v - volumn[i]] + value[i]);
}
}
System.out.println(dp[V]);
}
}
}

(二维dp)代码如下:

import java.util.*;

public class Main {
static final int MAX_N = 1000 + 10;
static int[] value = new int[MAX_N];
static int[] volumn = new int[MAX_N];
static int[][] dp = new int[MAX_N][MAX_N]; public static int Max(int a, int b) {
return a > b ? a : b;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in); int case_times = in.nextInt();
while (case_times-- != 0) {
int N, V; for (int i = 0; i < MAX_N; ++ i) {
for (int j = 0; j < MAX_N; ++ j)
dp[i][j] = 0;
}
N = in.nextInt();
V = in.nextInt();
for (int i = 1; i <= N; ++ i)
value[i] = in.nextInt();
for (int i = 1; i <= N; ++ i)
volumn[i] = in.nextInt();
for (int i = 1; i <= N; ++ i) {
for (int v = 0; v <= V; ++ v) {
if (v - volumn[i] >= 0)
dp[i][v] = Max(dp[i-1][v], dp[i-1][v - volumn[i]] + value[i]);
else
dp[i][v] = dp[i-1][v];
}
}
System.out.println(dp[N][V]);
}
}
}

hdoj 2620 Bone Collector(0-1背包)的更多相关文章

  1. HDU 2602 Bone Collector 0/1背包

    题目链接:pid=2602">HDU 2602 Bone Collector Bone Collector Time Limit: 2000/1000 MS (Java/Others) ...

  2. hdoj 2602 Bone Collector 【01背包】

    意甲冠军:给出的数量和袋骨骼的数,然后给每块骨骼的价格值和音量.寻求袋最多可容纳骨骼价格值 难度;这个问题是最基本的01背包称号,不知道的话,推荐看<背包9说话> AC by SWS 主题 ...

  3. HDOJ(HDU).2602 Bone Collector (DP 01背包)

    HDOJ(HDU).2602 Bone Collector (DP 01背包) 题意分析 01背包的裸题 #include <iostream> #include <cstdio&g ...

  4. hdu2602 Bone Collector(01背包) 2016-05-24 15:37 57人阅读 评论(0) 收藏

    Bone Collector Problem Description Many years ago , in Teddy's hometown there was a man who was call ...

  5. hdu 2602 Bone Collector(01背包)模板

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 Bone Collector Time Limit: 2000/1000 MS (Java/Ot ...

  6. HDU2602 Bone Collector 【01背包】

    Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  7. HDU 2639 Bone Collector II(01背包变形【第K大最优解】)

    Bone Collector II Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  8. hdu 2602 - Bone Collector(01背包)解题报告

    Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  9. HDU2602 Bone Collector(01背包)

    HDU2602 Bone Collector 01背包模板题 #include<stdio.h> #include<math.h> #include<string.h&g ...

随机推荐

  1. vijos 1047 送给圣诞夜的礼品 矩阵

    题目链接 描述 当小精灵们把贺卡都书写好了之后.礼品准备部的小精灵们已经把所有的礼品都制作好了.可是由于精神消耗的缘故,他们所做的礼品的质量越来越小,也就是说越来越不让圣诞老人很满意.可是这又是没有办 ...

  2. PyCharm 2016.1 for Mac 激活方法分享

    内容如题,需要就参考一下,不需要请绕行!内容来自墙外我只是搬运工! 简单介绍一下步骤: 1.下载下面的压缩包并解压下来. http://files.cnblogs.com/files/korykim/ ...

  3. c 函数传入数组。

    php 里面 直接 count($arr); 一个函数搞定, c里面想判断下数组的个数却非常困难. 想到php是C写的,那看看他的函数怎么写的不就行了... 哦,天啊,,事实比我想的要复杂的多... ...

  4. PADS无模命令总结

    1.PADS2007无模命令与快捷键 <x.y>表示坐标.<s>表示文体.<n>表示数字. 1.[C]显示平面的焊盘和热焊盘(Thermal). 2.[D]显示当前 ...

  5. 11417 - GCD

    Problem A GCD Input: Standard Input Output: Standard Output Given the value of N, you will have to f ...

  6. oracle初始安装大小

    oracle初始安装大小 /ruiy/ocr/DBSoftware/app/oracle/ruiy/ocr/DBSoftware/app/oraInventory/ruiy/ocr/DBData/or ...

  7. label 标签

    <label> 标签为 input 元素定义标注内容 label 元素不会向用户呈现任何特殊效果.不过,它为鼠标用户改进了可用性.如果您在 label 元素内点击文本,就会触发此控件.就是 ...

  8. favicon

    <link rel="icon" href="Images/wangyi.ico" type="text/plain" />

  9. JS关闭页面无提示

    window.opener=null; window.open('','_self'); window.close();

  10. Java动态编程---动态代理

    java中动态编程用到的技术有:反射(动态代理),javassist和ASM,这几种动态编程方法相比较,在性能上Javassist高于反射,但低于ASM,因为Javassist增加了一层抽象.在实现成 ...