• HDU 2602 Bone Collector


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

                                  Bone Collector

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

    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
     
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 int v[1000],w[1005];
     6 int n,c;
     7 int f[1005][1005];//对于dp(i,j)就表示可选物品为i…n背包容量为j(总重量)时背包中所放物品的最大价值。
     8 void backpack()
     9 {
    10     int i,j;
    11     for(i=1;i<=n;i++)
    12       for(j=0;j<=c;j++)
    13       {
    14           if(i==1)
    15              f[i][j]=0;
    16           else
    17             f[i][j]=f[i-1][j];
    18          if(j>=v[i])
    19            f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i]);
    20       }
    21     printf("%d
    ",f[n][c]);
    22 }
    23 int main()
    24 {
    25    int t;
    26    scanf("%d",&t);
    27   while(t--)
    28   {
    29       int i;
    30      scanf("%d%d",&n,&c);
    31     for(i=1;i<=n;i++)
    32       scanf("%d",&w[i]);
    33     for(i=1;i<=n;i++)
    34       scanf("%d",&v[i]);
    35     backpack();
    36   }
    37  return 0;
    38 }
  • 相关阅读:
    POJ 3258 二分答案
    Prototype 模式示例代码 (C++)
    offsetof 和 container_of
    二进制整数中的“1”
    Binary Tree Traversal Algorithms (二叉树遍历算法)
    A* Pathfinding Algorithm
    Axis­ Aligned 
Rectangles (Google 面试题, 2016网易游戏校招笔试)
    [LeetCode] Burst Ballons
    C++ 继承语义下构造函数中的对象指针
    kill-9和kill-15的区别
  • 原文地址:https://www.cnblogs.com/cancangood/p/4165850.html
Copyright © 2020-2023  润新知