zoukankan      html  css  js  c++  java
  • hdu 2602(经典01背包)

    Bone Collector

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

    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
    01背包 
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #define N 10000
    typedef long long ll;
    using namespace std;
    int value[N],vloume[N];
    int dp[N];
    int main()
    {
        int t;
        scanf("%d",&t);
        int n,v;
        while(t--)
        {
            memset(value,0,sizeof(value));
            memset(vloume,0,sizeof(vloume));
            memset(dp,0,sizeof(dp));
            scanf("%d%d",&n,&v);
            for(int i=0;i<n;i++)
                scanf("%d",&value[i]);
            for(int i=0;i<n;i++)
                scanf("%d",&vloume[i]);
            for(int i=0;i<n;i++)
            {
                for(int j=v;j>=vloume[i];j--)
                {
                    dp[j]=max(dp[j],dp[j-vloume[i]]+value[i]);
                }
            }
            printf("%d
    ",dp[v]);
        }
    }
    
  • 相关阅读:
    Nodejs服务器搭建
    CRC8校验,生成多项式:X8 + X2 + X + 1
    windows server 2019添加开机启动项
    Ubuntu20.04下SSH2安装, gulp live报错解决
    Ubuntu 20.04 开机执行自定义脚本
    STUN/TURN服务器搭建
    PostgreSQL开启远程连接
    Ubuntu 20.04 开机执行自定义脚本
    CentOS下 rpm软件包的安装与卸载
    Ubuntu18.04安装JDK1.8.0_11
  • 原文地址:https://www.cnblogs.com/Aa1039510121/p/6501468.html
Copyright © 2011-2022 走看看