hdu2602

Bone Collector

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


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背包
 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<string.h>
 4 using namespace std;
 5 int main()
 6 {
 7     int va[1010],vo[1010],dp[1010],i,j,T,n,v;
 8     scanf("%d",&T);
 9     while(T--)
10     {
11         scanf("%d%d",&n,&v);
12         memset(dp,0,sizeof(dp));
13         for(i=0; i<n; i++)
14             scanf("%d",&va[i]);
15         for(i=0; i<n; i++)
16             scanf("%d",&vo[i]);
17         for(i=0; i<n; i++)
18             for(j=v; j>=vo[i]; j--)
19                 dp[j]=max(dp[j],dp[j-vo[i]]+va[i]);
20         printf("%d
",dp[v]);
21     }
22     return 0;
23 }
原文地址:https://www.cnblogs.com/lxm940130740/p/3618746.html