hduoj 2602Bone Collector
Bone Collector
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 40598 Accepted Submission(s):
16872
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 ?
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.
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
Recommend
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<stack> 5 #include<set> 6 #include<map> 7 #include<queue> 8 #include<algorithm> 9 using namespace std; 10 #define max(a,b) (a>b?a:b) 11 int va[1005],vo[1005],dp[1005][1005]; 12 int main() 13 { 14 //freopen("D:\\INPUT.txt","r",stdin); 15 int t,i,j; 16 int n,v; 17 scanf("%d",&t); 18 while(t--) 19 { 20 scanf("%d %d",&n,&v); 21 for(i=1; i<=n; i++) 22 { 23 scanf("%d",&va[i]); 24 } 25 for(i=1; i<=n; i++) 26 { 27 scanf("%d",&vo[i]); 28 } 29 //dp[i][j] 前i件物品放入j体积的价值的最大值 30 //dp[i][j]=max(dp[i-1][j],dp[i-1][j-vo[i]]+va[i]) 31 for(i=1; i<=n; i++) //i体积 32 { 33 for(j=0; j<=v; j++) 34 { 35 if(j>=vo[i]){ 36 dp[i][j]=max(dp[i-1][j],dp[i-1][j-vo[i]]+va[i]); 37 } 38 else{ 39 dp[i][j]=dp[i-1][j]; 40 } 41 42 //cout<<i<<" "<<j<<" "<<dp[i][j]<<endl; 43 } 44 } 45 printf("%d\n",dp[n][v]); 46 } 47 return 0; 48 }