背包问题

题目:

         一个小偷抢劫了一个保险箱,发现里面装有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;
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值