zoukankan      html  css  js  c++  java
  • hdu Bone Collector

    Bone Collector

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 226    Accepted Submission(s): 115
     
    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
     
    Author
    Teddy
     
    Source
    HDU 1st “Vegetable-Birds Cup” Programming Open Contest
     
    Recommend
    lcy
     

    分析: 典型的0-1背包,V不要求用完。

    #include<cstdio>
    #include<algorithm>
    #include<string>
    #include<cstring>
    #include<iostream>
    using namespace std;
    typedef struct S
    {
        int v,w;
    }BONE;
    BONE bone[1010];
    
    int f[1010];
    int main()
    {
        int T,W,n,i,j,stop;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&W);
            for(i=0;i<n;++i)
                scanf("%d",&bone[i].v);
            for(i=0;i<n;++i)
                scanf("%d",&bone[i].w);
            memset(f,0,sizeof(f));
           for(i=0;i<n;++i)
           {
               for(j=W;j>=bone[i].w;--j)
               {
                   if(f[j-bone[i].w]+bone[i].v>f[j])
                       f[j]=f[j-bone[i].w]+bone[i].v;
               }
           }
            printf("%d\n",f[W]);
        }
        return 0;
    }
  • 相关阅读:
    正则 匹配 HTML 标签
    webpack 打包图片 能否提高加载速度
    禁止手机浏览器左右滑屏 后退 前进
    Objective-C--@property,@synthesize关键字介绍
    ios--绘图介绍
    iOS--为视图添加阴影
    iOS--iOS7摄像头识别二维码功能
    iOS--日历事件的获取和添加
    iOS-#ifdef DEBUG代码块介绍
    如何将你的程序打包成ipa
  • 原文地址:https://www.cnblogs.com/baidongtan/p/2664741.html
Copyright © 2011-2022 走看看