贪心算法-背包算法-java实现
来源:互联网 发布:淘宝财务报表 编辑:程序博客网 时间:2024/05/19 00:14
/**
* 贪心算法-背包算法:
*/
public class Backpack {
// 现有一个背包容量150kg
// 有一个宝藏里面有很多物品,物品的重量和价值分别为:
// 25kg--20
// 30kg--40
// 60kg--45
// 35kg--50
// 20kg--10
// 50ke--45
// 40ke--50
private int[] weights = new int[] { 25, 30, 60, 35, 20, 50, 40 };// 物品重量
private int[] values = new int[] { 20, 40, 45, 50, 10, 45, 50 };// 物品价值
private int capacity = 150;
/**
* 根据物品重量和物品价值,求出每个物品的性价比-》将性价比进行排序-》选取性价比最高的物品添加到背包中-》直到背包不能再添加
*/
public void backpack() {
// step1:求物品性价比-》并从大到小排序
int size = weights.length;// 物品数量
double[] prices = new double[size];// 每个物品的性价比(每kg的价值)
// 用一个数组用于保存排序后的性价比和最开始的物品重量的下标
int[] tags = new int[size];
for (int i = 0; i < size; i++) {
prices[i] = (double) values[i] /weights[i] ;
tags[i] = i;//默认排序
}
// 选择排序
for (int i = 0; i < size; i++) {
for (int j = i+1; j < size; j++) {
if (prices[i] < prices[j]) {
// 交换
double temp = prices[i];
prices[i] = prices[j];
prices[j] = temp;
int tag = tags[i];
tags[i] = tags[j];
tags[j] = tag;
}
}
}
// 根据已经从大到小排好序的性价比,和相对应的重量和价值,添加到背包中
for (int i = 0; i < size; i++) {
// 根据tags数组中重量的下标,拿到重量
if (weights[tags[i]] < capacity) {
System.out.println("添加物品" + weights[tags[i]]);
capacity = capacity - weights[tags[i]];
}
}
}
public static void main(String[] args) {
Backpack backpack = new Backpack();
backpack.backpack();
}
}
结果打印:
添加物品35
添加物品30
添加物品40
添加物品25
0 0
- 贪心算法-背包算法-java实现
- 用贪心算法背包问题,Java实现
- JAVA贪心算法实现背包问题
- 用贪心算法实现的背包问题(java语言)
- 用贪心算法解背包问题Java实现
- 贪心算法java实现
- 背包算法(Java 实现)
- 用贪心算法实现的背包问题
- 贪心算法运用于背包问题(C++实现)
- 背包问题之贪心算法实现
- 【算法】贪心策略实现部分背包问题
- 贪心算法_01背包问题_Java实现
- Java描述贪心算法解决背包问题
- [贪心算法]java解决背包问题
- 贪心算法 - 背包问题
- 贪心算法----背包问题
- 【贪心算法】:背包问题
- 贪心算法-背包问题
- HTML<base>标签
- 针对MySQL创建用户后无法登录的原因
- 云客Drupal8源码分析之控制器执行及其解析器controller_resolver
- leetcode-FuzzBuzz
- 批量修改文件编码
- 贪心算法-背包算法-java实现
- #DeepLearningBook#算法概览之九:Monte Carlo Methods
- HTML中footer一直沉底的最常用解决办法
- CGlib简单介绍
- MySql存储过程基础语法摘要
- 关于使用Windbg查看线程死锁问题
- codeforces 159A Friends or Not
- Dijkstra算法(单源最短路径)
- Java 集合深入理解(16):HashMap 主要特点和关键方法源码解读