hdu 2602 Bone Collector

来源:互联网 发布:ubuntu 删除samba用户 编辑:程序博客网 时间:2024/04/19 06:26

Bone Collector

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


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
15 101 2 3 4 55 4 3 2 1
 

Sample Output
14
 
 
package hd;import java.util.Scanner;/** *  @功能Function Description:     *  @开发环境Environment:         eclipse * @技术特点Technique:           动态规划(背包) *@版本Version:  Scanner *@作者Author:                  follow your dreams *@日期Date:                    20120822 *@备注Notes:   *@链接:                       http://acm.hdu.edu.cn/showproblem.php?pid=2602                    */public class HD2602_1_20120817 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int count = sc.nextInt();while(count-- != 0) {int n = sc.nextInt();//骨头的种类数量int maxv = sc.nextInt();//背包的体积int[] v = new int[n+1];//保存每个骨头的体积int[] value = new int[n+1];//保存每个骨头的价值for(int i=1; i<=n; i++) {value[i] = sc.nextInt();}for(int i=1; i<=n; i++) {v[i] = sc.nextInt();}int[][] f = new int[n+1][maxv+1];//保存骨头的体积for(int i=1; i<=n; i++) {//骨头的种类for(int j=0; j<=maxv; j++) {//背包当前的体积是jif(j-v[i]>=0 && f[i-1][j-v[i]] + value[i] > f[i-1][j]) {f[i][j] = f[i-1][j-v[i]] + value[i];} else {f[i][j] = f[i-1][j];}}}//show(f);System.out.println(f[n][maxv]);}}//public static void show(int[][] f) {//for(int i=0; i<f.length; i++) {//for(int j=0; j<f[0].length; j++) {//System.out.print(f[i][j] + " ");//}//System.out.println();//}//System.out.println();//}}


 

原创粉丝点击