java经典递归 背包问题

java经典递归 背包问题

1.引出

出去旅游,但背包有限,吃的喝的用的都有各自的体积大小,以重量为例,引出问题,该怎样选择装物品能正好装满背包!

2.应用

在一个物品向量中找到一个子集满足条件如下 :

1)所有物品加起来的重量大小,小于等于背包总值

  1. 所以单个物品不大于背包总值,并满足条件1

递归问题.
这个背包可以放入物品的重量为weight,现在n件物品,重量分别为w[0],w[1]…w[n - 1].问题是能否从这n件物品中选择若干件放入此背包中使得放入的重量之和正好等于weight.
试用简单缜密的递归逻辑实现

不说别的直接上代码!

这是一个简单的例子!

Integer[]  weights = {1,5,7,6,7,4};
Integer weight = 18;
void main(){
	 pack(weight,0);
}
boolean pack(int weight,int num){

		if(weight == 0)
			return true;
			
		if((weight > 0 && num >= (weights.length - 1)) || weight < 0 )
			return  false;

		if(pack(weight - weights[num],num + 1)){
			System.out.println("num: "+ (num +1 ) +" weight: " + weights[num]);
			return true;
		}

		if(pack(weight,num+1))
			return true;
		else
			return false;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值