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的 ...
随机推荐
- python 作业 日报模板输出
1 #!/usr/bin/env python 2 # coding: utf-8 3 4 import numpy as np 5 import pandas as pd 6 7 path='C:/ ...
- Luogu P5307 [COCI2019] Mobitel
题意 有一个 \(r\times c\) 的矩阵 \(a\),矩阵的每个位置都有一个正整数,求从左上角走到右下角并且满足路径上数字乘积之和大于 \(n\) 的方案数. \(\texttt{Data R ...
- Luogu P6815 [PA2009]Cakes
题意 给定一个 \(n\) 个点 \(m\) 条边的图,点 \(i\) 有权值 \(a_i\),一个三元环 \((i,j,k)\) 的贡献为 \(\max(a_i,a_j,a_k)\),求所有三元环的 ...
- 探索G1垃圾回收器
前言 最近王子因为个人原因有些忙碌,导致文章更新比较慢,希望大家理解,之后也会持续和小伙伴们一起共同分享技术干货. 上篇JVM的文章中我们对ParNew和CMS垃圾回收器已经有了一个比较透彻的认识,感 ...
- 3.5 MyLinkedList 实现
3.5 MyLinkedList 类的实现 MyLinkedList 将用双链表实现,并且还需要保留该表两端的引用.这将需要三个类 MyLinkedList 类,包含到两端的链.表的大小以及一些方法. ...
- Es6-Promise初识
Promise 含义: Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Pro ...
- 找不到package
在rosrun (前面要有roscore)显示 cannot find the package 只需要一次 永久有效 catkin _ws 是工作空间 rhl@rhl-Lenovo-G480:~$ e ...
- ()C++中的赋值运算符重载函数(operator=)
本文主要介绍C++中的重载操作符(operator)的相关知识. 概述 1.1 what operator 是C++的一个关键字,它和运算符(如=)一起使用,表示一个运算符重载函数,在理解时可将ope ...
- linux磁盘已满,查看那个目录文件最占磁盘空间并解决没有内存不耗费资源删除
df -Th查看磁盘空间占用情况 [root@IntelRC-Nginx-N023 ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on ...
- ABP框架中一对多,多对多关系的处理以及功能界面的处理(1)
在我们开发业务的时候,一般数据库表都有相关的关系,除了单独表外,一般还包括一对多.多对多等常见的关系,在实际开发过程中,需要结合系统框架做对应的处理,本篇随笔介绍基于ABP框架对EF实体.DTO关系的 ...