zoukankan      html  css  js  c++  java
  • HDU——2602Bone Collector(01背包)

    Bone Collector

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


    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

    发现不做DP不行啊,以后还怎么混。先来道题入个门....

    代码:

    #include<iostream>
    #include<algorithm>
    #include<cstdlib>
    #include<sstream>
    #include<cstring>
    #include<cstdio>
    #include<string>
    #include<deque>
    #include<cmath>
    #include<queue>
    #include<set>
    #include<map>
    using namespace std;
    struct gutou
    {
        int val;
        int weigh;
    }bone[1010];
    int dp[1010][1010];
    int main (void)
    {
        int t,i,n,j,v;
        cin>>t;
        while (t--)
        {
            memset(dp,0,sizeof(dp));
            cin>>n>>v;
            for (i=1; i<=n; i++)
            {
                cin>>bone[i].val;
            }
            for (i=1; i<=n; i++)
            {
                cin>>bone[i].weigh;            
            }
            for (i=1; i<=n; i++)
            {
                for (j=v; j>=0; j--)
                {
                	if(j<bone[i].weigh)//二维的话必须要有这局
                	{
    	            	dp[i][j]=dp[i-1][j];
    	            	continue;
    	            }
                    dp[i][j]=max( dp[i-1][j] , dp[i-1][j-bone[i].weigh]+bone[i].val );//取和不取
                }
            }
            cout<<dp[n][v]<<endl;
        }
        return 0;
    }
  • 相关阅读:
    python 中 repr() 与str() 区别
    python高级特性 知识 架构总结
    python 递归 之加特技 汉诺塔
    python 递归 反转字符串
    git 的使用
    vim 常用命令
    ubuntu下零基础建站之python基础环境搭建
    Oracle 分组统计,抽取每组前十
    SQL Server2008知识点总结
    java 连接sql server2008配置
  • 原文地址:https://www.cnblogs.com/Blackops/p/5384733.html
Copyright © 2011-2022 走看看