01背包问题是动态规划中的经典问题
一、问题描述:有n 个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?
解决这个题有两种方法,和其它的动态规划问题一样
数组w[]为物品的重量,v[]为物品的价值
一种是递归的思想,从后向前考虑,背包决定是否放一个物品是根据两个值的大小判断(一个值是背包没有放入这个物品的价值,另一个值是背包放入这个物品,另外背包容量减少物品重量的价值),去两个值中的最大值,递归结束条件是物品放完或者是背包容量小于等于0
量化为公式就是
public int recursiveBackpack1(int[] w, int[] v, int size) {
if (w.length != v.length) return -1;
int n = w.length;
return bestValue1(w, v, n - 1, size);
}
private int bestValue1(int[] w, int[] v, int index, int size) {
if (index < 0 || size <= 0) return 0;
int res = bestValue1(w, v, index - 1, size);
if (size >= w[index]) {
res = max(v[index] + bestValue1(w, v, index - 1, size - w