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的 ...
随机推荐
- EXCEL计数时间差--分钟数
- xlrd、xlwt常用命令
# -*- coding: utf-8 -*- import xlrd import xlwt from datetime import date,datetime def read_excel( ...
- CodeForces 1408I Bitwise Magic
题意 给定三个整数 \(n,k,c\) 和一个长度为 \(n\) 的序列 \(a\),保证 \(a_i\) 互不相同.可以操作 \(k\) 次,每次随机选择一个 \(a_i\) 变成 \(a_i-1\ ...
- python使用pandas进行数据处理
pandas数据处理 关注公众号"轻松学编程"了解更多. 以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter notebook 打开浏览器输入网址http://loc ...
- yum安装出现被锁定的报错
问题:在使用#yum install XXX 命令的时候,出现yum.pid 已被锁定的提示,无法进行yum 安装 解决: 使用# rm -f /var/run/yum.pid 命令删除该进程即可
- OJ-1:时钟问题【九度1553】
题目描述: 如图,给定任意时刻,求时针和分针的夹角(劣弧所对应的角). 输入: 输入包含多组测试数据,每组测试数据由一个按hh:mm表示的时刻组成. 输出: 对于每组测试数据,输出一个浮点数,代表时针 ...
- layui table表格详解
上次做table有些东西 忘记了 这次当作来个分析总结一下 跟大家共同学习 闲话不多说 直接上例子 代码: <form id="form1" runat="s ...
- Docker学习笔记:Alpine镜像+Python3安装+http服务器
编写Dockerfile文件使用最新的Alpine镜像并安装Python3环境,如下: 因为python高于3.4则不会默认安装pip,需要手动安装. 试了很多其他办法都没安装上,唯有下载get-pi ...
- Martini初步
部分内容来自http://jerkwin.github.io/9999/08/01/Martini%E7%B2%97%E7%B2%92%E5%8C%96%E5%8A%9B%E5%9C%BA%E4%BD ...
- 线程与更新UI,消除偏见,细谈原理
前言 相信不少读者都阅读过相类似的文章了,但是我还是想完整的把这之间的关系梳理清楚,细节聊好,希望你也能从中学到一些. 进入正题,大家应该都听过这样一句话--"UI更新要在主线程,子线程更新 ...