背包问题
来源:互联网 发布:java报表程序 编辑:程序博客网 时间:2024/05/17 20:29
01背包问题
动态规划法
问题描述:有num件物品和一个容量为capacity的背包。第i件物品的体积是cubage[i],价值是value[i]。求解将哪些物品装入背包可使这些物品的体积总和不超过背包容量,且价值总和最大。
具体分析过程见动态规划0—1背包问题
Java实现:
import java.util.Scanner;public class KnapsackProblem { public static void main(String[] args) { test(); } /** * 从控制台输入数据,数据格式为: * 第一行 背包容量v 物品数量n * 第二行至第N+1行 物品体积c 物品价值w * * 输出:能够装入背包的物品的最大价值 */ public static void test() { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int capacity = scanner.nextInt(); int num = scanner.nextInt(); int[] cubage = new int[num]; int[] value = new int[num]; for (int i = 0; i < num; i++) { cubage[i] = scanner.nextInt(); value[i] = scanner.nextInt(); } System.out.println(knapsackProblem(capacity, num, cubage, value)); } } /** * * @param capacity 背包容量 * @param num 物品数目 * @param cubage 每件物品的体积 * @param value 没见物品的价值 * @return */ public static int knapsackProblem(int capacity, int num, int[] cubage, int[] value) { int[][] totleValues = new int[num + 1][capacity + 1]; for (int i = 1; i < num + 1; i++) { for (int j = 1; j < capacity + 1; j++) { if (cubage[i - 1] > j) { totleValues[i][j] = totleValues[i-1][j]; }else{ totleValues[i][j] = Math.max(totleValues[i - 1][j], totleValues[i - 1][j - cubage[i - 1]] + value[i - 1]); } } } return totleValues[num][capacity]; }}
0 0
- 【无限背包】背包问题
- 背包问题---01背包
- 背包问题--部分背包
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- Enhanced Shared Situational Awareness
- svn如何修改用户名
- Dubbo解析及原理浅析
- 深度学习(四十)优化求解系列(2)简单理解神经网络求解过程-未完待续
- Android中的Handler_1
- 背包问题
- 【java多线程系列】java中的volatile的内存语义
- HTML5之Web Workers
- 大数据 - R语言数据可视化 - 1
- Eclipse怎样快速去掉注释?
- STL之priority_queue
- HDFS常用命令
- WebView 加载HTML和CSS
- 小z的袜子题后小结