递归——0-1 Knapsack
来源:互联网 发布:强迫症 知乎 编辑:程序博客网 时间:2024/06/02 04:12
最基础的0-1背包问题
题目:
Given a knapsack which can hold s pounds of items, and a set of items with weight w1, w2, ... wn. Returnwhether we can pick specific items so that their total weight s.
Example Input: s = 20; w = [14, 8, 7, 5, 3];
Example Output: true.
分析:
依照递归的三个步骤:
(1). 找出 base case
当前目标重量为0时,我们就不再需要从knapsack中找item了,证明可以满足要求并返回true;
当前目标重量小于0,knapsack中剩余的item不需要再判断了,失败并返回false;
knapsack中所有的item都判断过了,仍然不能满足s(s != 0),证明失败并返回false;
(2). 分析出 recursion rule
在递归函数中,对于knapsack中的任一item,我们可以选择或者不选择它。
当不选择当前item时,目标重量仍然为当前的 s,子递归函数开始判断下一个 item;
当选择当前item时,目标重量需要减掉当前item的重量即变成了 s - weight(current item),子递归函数开始判断下一个item;
(3). 确定递归函数的参数
首先我们需要有item重量的数组 w;
我们需要一个 int参数 记录当前目标重量 s;
需要一个 int参数,记录当前正在判断的 item id 或是 item index。
代码:
public class Knapsack { public static void main(String[] args) { int s = 20; int[] weights = {14, 8, 7, 5, 3}; System.out.println(Knapsack(weights, s, 0)); } public static boolean Knapsack(int[] weights, int s, int index) { if (s == 0) return true; if (s < 0 || index == weights.length) return false; // skip or select the index item return Knapsack(weights, s, index+1) || Knapsack(weights, s-weights[index], index+1); }}
- 递归——0-1 Knapsack
- 0-1 knapsack problem
- 0-1 Knapsack Problem
- [DP] 0-1 Knapsack Problem
- 【DP】 0/1 knapsack problem (single copy)
- 0-1背包问题(knapsack problem)
- Solution to 0–1 Knapsack Problem
- Geeks面试题:0-1 Knapsack Problem
- FZU 2214 Knapsack problem (0/1背包)
- 【0-1 knapsack】 474. Ones and Zeroes
- DP10 0-1背包问题 0-1 Knapsack Problem @geeksforgeeks
- 0-1背包问题 DPL_1_B- 0-1 Knapsack Problem
- brute force method for optimal solution(0-1 knapsack problem)
- use decision tree to solve 0-1 knapsack problem // optimal substructure
- 0-1背包问题和部分背包(fractional knapsack)问题分析
- 递归 递归 递归 —深入浅出
- FZU Problem 2214 Knapsack problem(01背包,超大背包)——第六届福建省大学生程序设计竞赛-重现赛
- 1782. Knapsack
- discuz X3.1+Apache2.2+php-5.2.17+mysql5.6.14+Discuz_X3.1
- 涵曦latoja
- Android:使用ExifInterface处理照片角度
- 【leetcode】3. Longest Substring Without Repeating Characters
- JAVA的可变参数,参数中有三个点
- 递归——0-1 Knapsack
- 最短路径问题
- hue安装
- Android的SDK与ADT不匹配问题
- Jquery取值中 javascript相关计算bug
- 行人检测 读书笔记 综述(5)2012
- 面向对象js
- Block变量,被__block修饰的变量称作Block变量。 基本类型的Block变量等效于全局变量、或静态变量。
- toolbar样式定制