01背包问题
来源:互联网 发布:sql注入漏洞修复工具 编辑:程序博客网 时间:2024/05/19 08:01
import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class OneZeroBag { public static class Item{ char name; int weight; int value; public Item(char name, int weight, int value) { this.name = name; this.weight = weight; this.value = value; } @Override public String toString() { return "Item{" + "name=" + name + ", weight=" + weight + ", value=" + value + '}'; } } public static int get01PackageMaxValue(List<Item> items, int capacity, List<Item> selectedItems){ int[][] dp = new int[items.size()+1][capacity+1]; for(int[] dpi : dp) { Arrays.fill(dpi, 0); } boolean[] selected = new boolean[items.size()]; Arrays.fill(selected, false); for(int currCapacity = 1; currCapacity <= capacity; currCapacity++){ for(int i = 0; i < items.size(); i++){ int currItemIndex = i + 1; Item currItem = items.get(i); if(currItem.weight <= currCapacity){ dp[currItemIndex][currCapacity] = Math.max(dp[currItemIndex-1][currCapacity-currItem.weight] + currItem.value, dp[currItemIndex-1][currCapacity]); }else { dp[currItemIndex][currCapacity] = dp[currItemIndex-1][currCapacity]; } } } System.out.println("二维数组:"); for(int[] arr : dp){ System.out.println(Arrays.toString(arr)); } int capacityTemp = capacity; for (int k = items.size()-1; k >= 0; k--){ Item item = items.get(k); int index = k+1; if(dp[index][capacityTemp] == dp[index-1][capacityTemp-item.weight] + item.value){ capacityTemp -= item.weight; selectedItems.add(item); } } return dp[items.size()][capacity]; } public static void main(String[] args){ List<Item> items = new ArrayList<>(Arrays.asList(new Item('a', 2, 6), new Item('b', 2, 3), new Item('c', 6, 5), new Item('d', 5, 4), new Item('e', 4, 6))); List<Item> selectedItems = new ArrayList<>(); int maxValue = get01PackageMaxValue(items, 10, selectedItems); System.out.println("max value:" + maxValue); System.out.println("selected items:" + selectedItems); }}
参考资料写的很好:
http://blog.csdn.net/wumuzi520/article/details/7014559
http://blog.csdn.net/mu399/article/details/7722810
0 0
- 背包问题---01背包
- DP 背包问题 01背包
- 01背包--苹果,背包问题
- 01背包 完全背包问题
- 背包问题之01背包
- 背包问题之01背包
- 背包问题1:01背包
- 背包问题《1》01背包
- 01背包+完全背包问题
- 背包问题-背包01-苹果
- 背包问题之01背包
- 背包问题(01背包,完全背包,多重背包)
- 背包问题(01背包,完全背包,多重背包)
- 动态规划-----背包问题-----01背包,完全背包,多重背包
- 经典背包问题 01背包+完全背包+多重背包
- 背包(01背包、完全背包、多重背包)问题总结
- 背包问题(01背包,完全背包,多重背包)
- 经典背包问题 01背包+完全背包+多重背包
- lua脚本语言在WireShark中的使用浅析
- 简单的网络技术及数据解析
- java.lang.String cannot be cast to org.springframework.http.MediaType 异常分析
- AFNetworking3.1 基本使用
- Retrofit结合RxJava的一次实践
- 01背包问题
- HDU 5361 (优先队列 线段树)
- 自定义按钮三态
- 内核设备驱动学习启动篇(个人笔记)
- Redis3.x-集群搭建
- android布局属性
- Linux系统下makefile教程讲解
- UIAlertController 提示框
- 为什么要4k对齐