`

hdu 2602 Bone Collector(我的第一个01背包)

阅读更多

Bone Collector

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7904    Accepted Submission(s): 2949

Problem Description
Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’s , cow’s , also he went to the grave …
The bone collector had a big bag with a volume of V ,and along his trip of collecting there are a lot of bones , obviously , different bone has different value and different volume, now given the each bone’s value along his trip , can you calculate out the maximum of the total value the bone collector can get ?

Input
The first line contain a integer T , the number of cases.
Followed by T cases , each case three lines , the first line contain two integer N , V, (N <= 1000 , V <= 1000 )representing the number of bones and the volume of his bag. And the second line contain N integers representing the value of each bone. The third line contain N integers representing the volume of each bone.

 

Output
One integer per line representing the maximum of the total value (this number will be less than 231).

 

Sample Input
1 5 10 1 2 3 4 5 5 4 3 2 1

 

Sample Output
14
 
     这题就是最简单的01背包,逆序!!!
      for i=1..N

              for v=V..0

                  f[v]=max{f[v],f[v-c[i]]+w[i]};

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

代码:

#include <iostream>
#include <stdio.h>
#include <memory.h>
using namespace std;

int c[1005], w[1005];
int bag[1005];
int N, V;

void _01_bag()  //01背包:逆序!
{
    int i, j;
    memset(bag, 0, sizeof(bag));
    for(i = 0; i < N; i++)
    {
        for(j = V; j >= c[i]; j--)
        {
            bag[j] = max(bag[j], bag[j-c[i]] + w[i]);
        }
    }
}

int main()
{
    int i, t;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d %d", &N, &V);
        for(i = 0; i < N; i++)
            scanf("%d", &w[i]);
        for(i = 0; i < N; i++)
            scanf("%d", &c[i]);
        _01_bag();
        printf("%d\n", bag[V]);
    }

    return 0;
}

 

0
5
分享到:
评论

相关推荐

    背包问题模板 hdu2191

    背包问题模板 hdu2191 背包问题是计算机科学中一种经典的NP完全...该模板提供了一个通用的解决方案,可以解决各种背包问题,包括0/1背包问题、完全背包问题和多重背包问题。用户只需要根据问题的需求修改参数即可。

    背包DP与树形DP

    #### 实战案例:HDU2602 BONE Collector 此题是一个典型的背包问题实例,目标是确定在给定背包容量下,如何选择骨头以获得最大价值。通过对不同背包类型的理解和运用,可以有效地解决这类问题,关键在于正确地定义...

    背包专题 算法

    本节将通过HDU2602 "Bone Collector" 这道题,详细介绍0-1背包问题的解决策略。 ##### 例题分析:"Bone Collector" **题目描述**: 一位名叫“Bone Collector”的人喜欢收集各种骨头,如狗骨、牛骨,甚至墓地里的...

    (HDUACM201303版_07)背包专题

    杭电ACM课件2014版之 (HDUACM201303版_07)背包专题

    HDU图论题目分类

    HDU图论题目分类提供了一个系统化的图论知识框架,帮助开发者和研究者更好地理解和掌握图论的基本概念和技术。 以下是HDU图论题目分类中的部分知识点: 1. 图的基本概念:图的定义、图的表示、图的遍历、图的搜索...

    HDU_2010.rar_hdu 2010_hdu 20_hdu acm20

    【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...

    hdu.rar_hdu

    HDU(杭州电子科技大学在线评测系统)是一个深受程序员喜爱的在线编程练习平台,它提供了丰富的算法题目供用户挑战,帮助他们提升编程技能和算法理解能力。"hdu.rar_hdu"这个压缩包文件很可能是某位程序员整理的他在...

    HDU DP动态规划

    例如,一个简单的动态规划问题可以是“斐波那契数列”,其中状态通常定义为第n个斐波那契数,状态转移方程为F(n) = F(n-1) + F(n-2),初始条件为F(0) = 0,F(1) = 1。 在HDU的DP题目中,可能会有各种复杂度的题目,...

    HDU题目java实现

    HDU是一个知名的在线编程竞赛平台,它提供了大量的算法题目供参赛者练习和提交解决方案。这里的“java实现”意味着作者使用Java作为编程工具来解答这些算法题。 在Java编程方面,以下是一些可能涵盖的知识点: 1. ...

    HDU2013暑期多校联合训练第一场0723-解题报告和标程

    1. "2013暑期多校联合训练第一场0723-解题报告.pdf":这个PDF文件包含了这次训练的解题报告,可能包括了所有题目及其解法的详细分析,对于参赛者来说,这是理解和学习解题策略的重要资源。 2. "2013暑期多校联合训练...

    hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj

    【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...

    hdu1250高精度加法

    具体地,题目涉及到了斐波那契数列的一个变种:F(1)=1, F(2)=1, F(3)=1, F(4)=1, F(n&gt;4)=F(n-1)+F(n-2)+F(n-3)+F(n-4),其中n &gt; 4。这里的关键是要能够计算出F(n)的值,而由于这个序列的增长速度非常快,传统的整数...

    ACM HDU

    【标签】"ACM题解 HDU"意味着这是一个关于如何解答HDU ACM题目的资源,可能包含了解题思路、算法解析、代码实现等方面的内容。这样的资料对于准备ACM比赛的选手或者希望提升算法能力的程序员来说非常有价值。 在...

    ACM HDU题目分类

    ACM HDU 题目分类 ACM HDU 题目分类是指对 HDU 在线判题系统中题目的分类,总结了大约十来个分类。...ACM HDU 题目分类是一个非常重要的参考资源,对于编程选手来说,掌握这些分类可以帮助他们更好地理解和解决问题。

    2017hdu多校联合训练第一场标程及数据

    【标题】"2017hdu多校联合训练第一场标程及数据"涉及到的是一个编程竞赛的资源集合,主要是针对ACM(国际大学生程序设计竞赛)的比赛训练。这个标题意味着这个压缩包包含了该赛事的官方解决方案(标程)以及用于测试...

    hdu动态规划算法集锦

    - **问题描述**:这是一道典型的0-1背包问题变种,考虑如何最大化抢劫金额,且不会被抓住。 - **解题思路**: - 定义状态$f[j]$表示在第$j$个地点抢劫的最大收益。 - 状态转移方程:$f[j] = \max\{f[j], f[j - q[i...

    hdu1290解题报告

    **第一步:线分割平面** 首先解决较为简单的二维情况,即如何用 _n_ 条直线分割一个平面,并求出最多可以将平面分割成多少部分。这里的关键在于理解每新增一条直线都会增加新的分割区域数。 - 对于第 _1_ 条直线,...

    HDU1059的代码

    HDU1059的代码

    hdu1001解题报告

    hdu1001解题报告

    hdu 1574 passed sorce

    hdu 1574 passed sorce

Global site tag (gtag.js) - Google Analytics