背包问题
来源:互联网 发布:javascript对象是什么 编辑:程序博客网 时间:2024/06/08 02:36
问题与描述;
/**
* Author:林万新 lwx
* Date: 2017/10/27
* Time: 17:41
* 问题描述;
* 1个背包最多负重8KG,希望放入价值最大化
* 编号 水果 重量 价值
* 0 李子 4KG 4500
* 1 苹果 5KG 5700
* 2 橘子 2KG 2250
* 3 草莓 1KG 4500
* 4 甜瓜 6KG 4500
*
* 解法:
* 动态规划:从空集合开始,
* 每加入1个元素就求出该阶段最优解,
* 直到所有元素加入,最后得到的就是最佳解
*/
public class Package {
//内部水果类
class Fruit{
private String name;
private int size;//水果的重量
private int price;
public Fruit(String name, int size, int price) { this.name = name; this.size = size; this.price = price; } public String getName() { return name; } public int getSize() { return size; } public int getPrice() { return price; }}//方法public void package1(){ final int MAX = 8; int [] item = new int[MAX+1];//表示最后一个放到背包的水果 int [] value=new int[MAX+1];//这个才是重点:表示目前最佳解所得的总价 Fruit[] fruits = { new Fruit("李子",4,4500), new Fruit("苹果",5,5700), new Fruit("橘子",2,2250), new Fruit("草莓",1,1100), new Fruit("甜瓜",6,6700), }; //关键方法 for(int i = 0;i<fruits.length;i++){ for(int s = fruits[i].getSize();s<= MAX;s++){ int p = s - fruits[i].getSize(); int newvalue = value[p]+ fruits[i].getPrice();//关键思想 if(newvalue > value[s]){ value[s] = newvalue; item[s] = i; } } } System.out.println("物品\t价格"); for(int i = MAX;i>=1;i = i-fruits[item[i]].getSize()){ System.out.println(fruits[item[i]].getName() + "\t" + fruits[item[i]].getPrice()); } System.out.println("合计\t" + value[MAX]);}public static void main(String [] args){ new Package().package1();}
}
运行结果;
物品 价格
草莓 1100
橘子 2250
苹果 5700
合计 9050
阅读全文
0 0
- 【无限背包】背包问题
- 背包问题---01背包
- 背包问题--部分背包
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 谈谈扩容术
- Fatal error in gc GetThreadContext failed bug 异常。
- 防雪崩利器:熔断器 Hystrix 的原理与使用
- 字符串通配(动态规划java)
- Elasticsearch Recovery详解
- 背包问题
- 获取追踪占位点
- 虚拟化-内存虚拟化
- Apache配置支持流媒体服务
- Python编程:从入门到实践的动手试一试答案(第四章)
- mxnet : parameter-server/ps-lite阅读既要
- JVM原理及调优
- RPC介绍
- iscroll 上拉刷新极简入门案例