java经典递归 背包问题
1.引出
出去旅游,但背包有限,吃的喝的用的都有各自的体积大小,以重量为例,引出问题,该怎样选择装物品能正好装满背包!
2.应用
在一个物品向量中找到一个子集满足条件如下 :
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;
}