Java蓝桥杯——贪心算法
贪心算法
贪心算法:只顾眼前的苟且。
即在对问题求解时,总是做出在当前看来是最好的选择
如买苹果,专挑最大的买。
最优装载问题——加勒比海盗
货物重量:Wi={4,10,7,11,3,5,14,2}
海盗船载重:C
求如何拿货件数最多
package bb;
import java.util.Arrays;
public class 最优装载 {
static int[] W = { 4, 10, 7, 11, 3, 5, 14, 2 };
static int C = 30;
// 开发效率:
// 运行效率:
public static void main(String[] args) {
int count = 0;
Arrays.sort(W);
for (int n : W) {
System.out.println(n);
}
System.out.println("------------");
// 从小的开始装
for (int i = 0; i < W.length; i++) {
if (C < W[i]) {
// 剩余的载重量装不下一件
break;
} else {
System.out.println(W[i] + " ");
count++;// 装进来
C = C - W[i];
}
}
System.out.println("一共带走:" + count + "件");
}
}
阿里巴巴
山洞有宝贝n件,重量w,价值v
毛驴能运的重量最大为m,宝贝可以切开。问:如何带走价值最大的宝贝?
策略1:选价值最大——不行
策略2:选重量最小——不行
策略3:性价比(单位重量价值最大)
测试数据:
static int m = 30;
static int w[] = { 4, 2, 9, 5, 5, 8, 5, 4, 5, 5 };
static int v[] = { 3, 8, 18, 6, 8, 20, 5, 6, 7, 15 };
(背包问题——物品可以切割,0-1背包问题——不能切割,贪心算法不能得到最优解)
package bb;
import java.util.Arrays;
import java.util.Comparator;
public class 阿里巴巴 {
// 第一套数据
// static int m = 30;//(总价值70.5,装入5.25件)
// static int w[] = { 4, 2, 9, 5, 5, 8, 5, 4, 5, 5 };
// static int v[] = { 3, 8, 18, 6, 8, 20, 5, 6, 7, 15 };
// 第二套数据(总价值24.6,装入4.3件)
static int m = 19;
static int w[] = { 2, 6, 7, 4, 10, 3 };
static int v[] = { 8, 1, 9, 3, 2, 4 };
public static void main(String[] args) {
Goods[] gs = new Goods[w.length];
for (int i = 0; i < w.length; i++) {
gs[i] = new Goods();
gs[i].w = w[i];
gs[i].v = v[i];
gs[i].cost_performance = (double) v[i] / w[i];// 性价比
}
Arrays.sort(gs, new Comparator<Goods>() {
@Override
public int compare(Goods o1, Goods o2) {
return -o1.cost_performance.compareTo(o2.cost_performance);
}
});
double vTotal = 0.0;
for (Goods g : gs) {
System.out.println(g.w + "\t" + g.v);
if (m > g.w) {
m = m - g.w;// 剩余能带走的重量
vTotal += g.v;
} else {
double 切割比例 = (double) m / g.w;
double 最后价值 = g.v * 切割比例;
vTotal += 最后价值;
break;
}
}
System.out.println("共带走价值" + vTotal + "的宝贝");
}
}
class Goods {
int w;
int v;
Double cost_performance;
}
Java蓝桥杯——贪心算法的更多相关文章
- 算法笔记_107:蓝桥杯练习 算法提高 学霸的迷宫(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要 ...
- 算法笔记_096:蓝桥杯练习 算法提高 求最大值(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 给n个有序整数对ai bi,你需要选择一些整数对 使得所有你选定的数的ai+bi的和最大.并且要求你选定的数对的ai之和非负,bi之和非负 ...
- Java实现 蓝桥杯VIP 算法训练 连通分块(并查集)
试题 算法训练 连通分块 资源限制 时间限制:200ms 内存限制:8.0MB 问题描述 连通分块 输入格式 输入的第一行包含两个整数n, m n代表图中的点的个数,m代表边的个数 接下来m行,每行2 ...
- Java实现 蓝桥杯VIP 算法训练 无权最长链
试题 算法训练 无权最长链 问题描述 给定一个n节点m边的无圈且连通的图,求直径 输入格式 第一行两个数字n,m 接下来m行每行两个数字x,y,代表x,y之间有一条边 输出格式 要求用户的输出满足的格 ...
- Java实现 蓝桥杯VIP 算法训练 星际交流
算法训练 星际交流 时间限制:1.0s 内存限制:256.0MB 问题描述 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法 ...
- Java实现 蓝桥杯VIP 算法训练 Car的旅行路线
大家可以看一下这个,蓝桥杯官网的这道题是有问题的 Car的旅行路线 算法训练 Car的旅行路线 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 查看参考代码 问题描述 又到暑假 ...
- Java 蓝桥杯 算法训练(VIP) 最大体积
最大体积 问题描述 每个物品有一定的体积(废话),不同的物品组合,装入背包会战用一定的总体积. 假如每个物品有无限件可用,那么有些体积是永远也装不出来的. 为了尽量装满背包,附中的OIER想要研究一下 ...
- Java实现 蓝桥杯VIP 算法训练 JAM计数法
题目描述 Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小 写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数都是相同的(使用相同个数的字母),英文 ...
- Java实现 蓝桥杯VIP 算法训练 阿尔法乘积
蓝桥杯–阿尔法乘积 问题描述 计算一个整数的阿尔法乘积.对于一个整数x来说,它的阿尔法乘积是这样来计算的:如果x是一个个位数,那么它的阿尔法乘积就是它本身:否则的话,x的阿尔法乘积就等于它的各位非0的 ...
随机推荐
- 回顾C#各版本特性
C# 6.0 Read-only auto-properties(只读自动属性) 以前版本,声明只读属性时,示例: public string FirstName { get; private set ...
- 云计算管理平台之OpenStack Web管理工具dashboard
在上一篇博客中,我们成功的基于两种网络启动虚拟机:这意味着openstack的核心服务都搭建完成,并正常运行着:有关启动虚拟机实例请参考上一篇博客:今天我们来了解下,基于一个web界面图形工具来管理o ...
- OpenCascade拓扑对象之:Face的方向、参数域和曲面间的关系
@font-face { font-family: "Times New Roman" } @font-face { font-family: "宋体" } @ ...
- 如何在Debian上安装和使用PHP Composer
1.条件 shell使用sudo权限访问正在运行的debian系统. 必须安装和配置5.3或更高版本的PHP. 2.在Debian上安装Composer 可以通过运行以下命令从getcomposer. ...
- 我叫MongoDb,不懂我的看完我的故事您就入门啦!
这是mongo基础篇,后续会连续更新4篇 大家好我叫MongoDb,自从07年10月10gen团队把我带到这个世界来,我已经13岁多啦,现在越来越多的小伙伴在拥抱我,我很高兴.我是NoSQL大家族的一 ...
- yii中的andFilterWhere使用说明
当 WHERE 条件来自于用户的输入时,你通常需要忽略用户输入的空值. 例如,在一个可以通过用户名或者邮箱搜索的表单当中,用户名或者邮箱 输入框没有输入任何东西,这种情况下你想要忽略掉对应的搜索条件, ...
- 团灭 LeetCode 股票买卖问题
很多读者抱怨 LeetCode 的股票系列问题奇技淫巧太多,如果面试真的遇到这类问题,基本不会想到那些巧妙的办法,怎么办?所以本文拒绝奇技淫巧,而是稳扎稳打,只用一种通用方法解决所用问题,以不变应万变 ...
- (四)HTTP消息报头
HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成.请求消息和响应消息都是由开始行,消息报头,空行(只有CRLF的行),消息正文组成.对于请求消息,开始行就是请求行:对于响应消息,开始行就是 ...
- AQS源码深入分析之条件队列-你知道Java中的阻塞队列是如何实现的吗?
本文基于JDK-8u261源码分析 1 简介 因为CLH队列中的线程,什么线程获取到锁,什么线程进入队列排队,什么线程释放锁,这些都是不受我们控制的.所以条件队列的出现为我们提供了主动式地.只有满足指 ...
- c#反转
string[] arr = Console.ReadLine().Split(' '); string result = string.Empty; for (int i = arr.Count() ...