贪心算法实例(四):部分背包问题
来源:互联网 发布:多益网络校招笔试题 编辑:程序博客网 时间:2024/05/02 01:43
本例背包问题不同于动态规划0-1背包问题,包可以部分分配。
问题:在选择物品i装入背包时,可以选择物品的一部分,而不一定要全部装入背包。
计算每种物品的单位重量价值作为贪心选择的依据指标,选择单位重量价值最高的物品,将尽可能多的该物品装入背包,依此策略一直地进行下去,直到背包装满为止。在程序中已经事先将单位重量价值按照从大到小的顺序排好。具体实现代码如下所示:
/** * @Title: KnapSack.java * @Package greedyalgorithm * @Description: TODO * @author peidong * @date 2017-5-17 上午9:22:44 * @version V1.0 */package greedyalgorithm;/** * @ClassName: KnapSack * @Description: 部分背包问题 * @date 2017-5-17 上午9:22:44 * */public class KnapSack { public static final int N = 4; /** * * @Title: knapSack * @Description: 部分背包算法实现 * @param M * @param v * @param w * @param x * @return void * @throws */ public static void knapSack(float M, float[] v, float[] w, float[] x){ int i; //物品被整装 for(i = 1; i <= N; i++){ if(w[i] > M) break; x[i] = 1; M-=w[i]; } //物品散装 if(i <= N) x[i] = M/w[i]; } /** * @Title: main * @Description: 测试用例 * @param args * @return void * @throws */ public static void main(String[] args) { // TODO Auto-generated method stub float M = 50; //背包所能容纳的重量 float[] w = {0, 10, 30, 20, 5}; //每种物品的重量 float[] v = {0, 200, 400, 100, 10}; //每种物品的价值 float[] x = {0, 0, 0, 0, 0}; //记录结果的数组 knapSack(M, v, w, x); System.out.println("选择装下的物品比例:"); for(int i = 1; i <= N; i++){ System.out.printf("["+i+"]"+x[i]+" "); } }}
阅读全文
0 0
- 贪心算法实例(四):部分背包问题
- 部分背包问题(贪心算法)
- 算法/贪心算法/FractionalKnapsack部分背包问题
- 部分背包问题(贪心)
- 贪心算法解决部分背包问题
- 贪心算法---0/1部分背包问题
- 【算法】贪心策略实现部分背包问题
- 算法学习:贪心解部分背包问题
- C++ 贪心算法部分背包问题
- 背包问题(贪心算法)
- 背包问题(贪心算法)
- 贪心算法(背包问题)
- 贪心算法——部分背包问题(贪心策略内容)
- 经典算法6:贪心算法解决部分背包问题
- 部分背包问题(贪心) HDU1009
- 部分背包问题(贪心基础)
- 高效算法设计_贪心法(最优装载问题,部分背包问题,乘船问题)
- 贪心算法解决部分背包问题 在O(lgn)时间内
- 第十六周Dynamic Programing Ones and Zeroes
- 拷贝控制
- [深入浅出Cocoa]iOS网络编程之Socket
- Java 类加载机制详解
- 数据结构基础
- 贪心算法实例(四):部分背包问题
- nginx配置ssl加密(单双向认证、部分https)
- 【JavaEE】EJB与Spring的全面比较与JavaBean的不同
- springboot中用注解配置过滤器并配置多个过滤路径
- Python廖雪峰实战web开发(Day7-编写MVC)
- "愣头愣脑,欲望强烈",我的版本开始了
- imgproc模块--Remapping重映射
- QT日常代码二
- 读写分离如何实现?