题目描述
背包问题 给定两个长度都为N的数组weights和values,weights[i]和values[i]分别代表 i号物品的重量和价值 给定一个正数bag,表示一个载重bag的袋子,装的物品不能超过这个重量 返回能装下的最大价值
暴力递归
解题思路
要向获得最大值,其实就是在每一个物品之中做选择.
找出选择的最优解.
有了这个思路,那么递归就是在一个商品上选和不选去比较最大值,
递归的就已经出来了.
然后讨论base case 了,
一.weights 数组越界,没有商品可以选了,肯定是个结束条件
二.背包没有空间去装了,也是个base case 要返回的.
递归的结构和base case 都有了,直接看代码吧
代码演示
/**
* 获取最大值
* @param w
* @param v
* @param bag
* @return
*/
public static int maxValue(int[]w,int[]v,int bag){
//参数校验,题目中其实已经对数据限制了,
if (null == w || v == null || w.length != v.length || w.length == 0 || bag < 0 ){
return 0;
}
return process(w,v,0,bag);
}
/**
* 递归方法
* @param weights 不同商品重量
* @param values 商品价值 和重量一一对应
* @param index 下标值 代表要选第几号商品了
* @param bag 背包容量
* @return
*/
public static int process(int<