题目:
一个小偷抢劫了一个保险箱,发现里面装有N中大小和价值不同的东西,但只有一个容量为M的小背包来运走这些东西,背包问题
就是让小偷选择放在背包中的物品,使得带走东西的总价值最大。
17
背包中的物品
item A B C D E
size 3 4 7 8 9
val 4 5 10 11 13
输入示例:
17
3 4
4 5
7 10
8 11
9 13
代码:
package Recursion;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Demo1 {
//背包问题
static Item[] items = new Item[5];
static Scanner scan = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("输入你的背包的容量:");
int size = scan.nextInt();
//物品的初始化
System.out.println("输入物品的大小及价值:");
for(int i=0;i<5;i++){
items[i] = new Item(scan.nextInt(),scan.nextInt());
}
System.out.println("最大可以装价值为:");
System.out.println(knap(size));
}
public static int knap(int cap){
int i,space,max,t;
for(i=0,max=0;i<5;i++){
if((space=cap-items[i].size)>=0){
if((t=knap(space)+items[i].val)>max){
max = t;
}
}
}
return max;
}
public static class Item{
int size;
int val;
public Item(int size,int val){
this.size = size;
this.val = val;
}
}
}