[NOIP1999 提高组] 旅行家的预算(C++,贪心)
题目描述
一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离 D1D_1D1、汽车油箱的容量 CCC(以升为单位)、每升汽油能行驶的距离 D2D_2D2、出发点每升汽油价格PPP和沿途油站数 NNN(NNN 可以为零),油站 iii 离出发点的距离 DiD_iDi、每升汽油价格 PiP_iPi(i=1,2,…,Ni=1,2,…,Ni=1,2,…,N)。计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出 No Solution。
输入格式
第一行,D1D_1D1,CCC,D2D_2D2,PPP,NNN。
接下来有 NNN 行。
第 i+1i+1i+1 行,两个数字,油站 iii 离出发点的距离 DiD_iDi 和每升汽油价格 PiP_iPi。
输出格式
所需最小费用,计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出 No Solution。
样例 #1
样例输入 #1
275.6 11.9 27.4 2.8 2
102.0 2.9
220.0 2.2
样例输出 #1
26.95
提示
N≤6N \le 6N≤6,其余数字≤500\le 500≤500。
解题思路:
一道贪心题目
looplooploop的大致流程是这样的:
1.从当前点出发,检查能够到达的加油站
2.有两种情况:
(1)检查所有的油站后,发现当前油站是最便宜的
加满油,开到下一个油站
(2)找到更便宜的油站(且最近的)
直接加油到达,保证油量到达时为000,即刚好到达
所以looplooploop实际上就是检查->加油->下一个循环
然后需要处理几个特殊情况:
1.检查油站阶段,当前油站即是最后一个油站,直接判断能否到达终点,然后输出结果
2.检查油站阶段,距离过远而无法到达下一个加油站,输出No Solution
3.如果当前油站即是最便宜的加油站,判断能否直接到达终点
#include <iostream>
#include <iomanip>
using namespace std;
const int max_n = 6;double price[max_n + 1];
double loca[max_n + 1];
double d1, c, d2;
int n;int main() {cin >> d1 >> c >> d2;cin >> price[0] >> n;//将起点看作一个加油站for (int i = 1; i <= n; i++) {cin >> loca[i] >> price[i];}const double max_len = c * d2;//最大行驶距离double cur_fuel = 0.0;//当前的油量int cur_index = 0;//当前的位置double sum = 0.0;//总花费while (true) {//选择便宜的加油站(除了起点)int i = cur_index + 1;int min_index = cur_index + 1;int far = loca[cur_index] + max_len;//特判if (i > n) {//最后一个油站if (far >= d1) {double needed = (d1 - loca[cur_index]) / d2 - cur_fuel;sum += price[cur_index] * needed;break;}else {//不能到达终点cout << "No Solution" << endl;return 0;}}else if (loca[cur_index + 1] > far) {//无法到达下一个油站cout << "No Solution" << endl;return 0;}while (loca[i] <= far && i <= n) {if (price[min_index] > price[i]) {//找出能到达的加油站中最便宜的min_index = i;}if (price[min_index] < price[cur_index]) {//如果比起点更便宜,则选择该加油站min_index = i;break;}i++;}//加油if (price[min_index] > price[cur_index]) {//起点更便宜//判断是否能到达终点if (far >= d1) {double needed = (d1 - loca[cur_index]) / d2 - cur_fuel;sum += price[cur_index] * needed;break;}//未到达终点double needed = c - cur_fuel;//加满sum += price[cur_index] * needed;//前往下一地点cur_fuel = c - (loca[min_index] - loca[cur_index]) / d2;cur_index = min_index;}else {//找到更便宜的油站double needed = (loca[min_index] - loca[cur_index]) / d2 - cur_fuel;sum += price[cur_index] * needed;cur_fuel = 0;//刚好到达cur_index = min_index;}}cout << setiosflags(ios::fixed) << setprecision(2) << sum << endl;return 0;
}相关文章:
[NOIP1999 提高组] 旅行家的预算(C++,贪心)
题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离 D1D_1D1、汽车油箱的容量 CCC(以升为单位)、每升汽油能行驶的距离 D2D_2D2、出发点每升汽油价格PPP和沿途…...
Array.apply(null,{length: 99}) 逻辑解析
一、基础概述 vue 教程中有一段 demo code,如下: render: function (createElement) {return createElement(div,Array.apply(null, { length: 20 }).map(function () {return createElement(p, hi)})) }这个表达式Array.apply(null, { length: 20 })有…...
Web前端开发常用工具推荐(内含学前端必备软件资源)
1、Vim Vim作为一个类似于Vi的文本编辑器,功能强大的同时还可以做到高度可定制。当然了,虽然Vim类似Vi,但是它在Vi的基础上改进和增加了很多特性,VIM是纯粹的自由软件。即使Vim的学习成本高,但只要我们掌握很多的快捷…...
【python】考前复习,python基础语法知识点整理
文章目录1.常量与表达式2.变量和数据类型创建变量数据类型动态类型数据类型的转换3.注释4.字符串字符串的定义方式字符串的拼接字符串的格式化①字符串格式化的精度控制字符串的格式化②对表达式进行格式化5.从控制台输入(input)6.运算符算术运算符赋值运算符布尔类型和比较运算…...
3个月,入门网络安全并找到工作
在我进入大学之前,我一直对计算机感兴趣。虽然只是考了一个一般大学,但是选专业的时候还是选了计算机专业。 本来以为自己会在大学里学到很多有用的知识,并且能够很快找到一份好工作。但是,事实并不是这样。在大学期间,…...
你会用 TypeScript 的条件类型吗?
我们可以使用 TypeScript 中的条件类型来根据逻辑定义某些类型,就像是在编写代码那样。它采用的语法和我们在 JavaScript 中熟悉的三元运算符很像:condition ? ifConditionTrue : ifConditionFalse。我们来看看他是怎么工作的。 TypeScript 的条件类型…...
云原生丨一文教你基于Debezium与Kafka构建数据同步迁移(建议收藏)
文章目录前言一、安装部署Debezium架构部署示意图安装部署二、数据迁移Postgres迁移到PostgresMySQL迁移到PostgresSQL前言 在项目中,我们遇到已有数据库现存有大量数据,但需要将全部现存数据同步迁移到新的数据库中,我们应该如何处理呢&…...
顶象APP加固的“蜜罐”技术有什么作用
目录 蜜罐有很多应用模式 蜜罐技术让App加固攻守兼备 顶象端加固的三大功能 为了捕获猎物,猎人会在设置鲜活的诱饵。被诱惑的猎物去吃诱饵时,就会坠入猎人布置好的陷阱,然后被猎人擒获,这是狩猎中常用的一种手段。在业务安全防…...
训练一个ChatGPT需要多少数据?
“风很大”的ChatGPT正在席卷全球。作为OpenAI在去年底才刚刚推出的机器人对话模型,ChatGPT在内容创作、客服机器人、游戏、社交等领域的落地应用正在被广泛看好。这也为与之相关的算力、数据标注、自然语言处理等技术开发带来了新的动力。自OpenAI发布ChatGPT以来&…...
【GlobalMapper精品教程】053:打开dbf文件并生成有坐标系的shp数据
本文讲解在globalmapper汇总打开dbf文件并生成有坐标系的shp数据。 文章目录一、dbf文件解读二、打开dbf文件二、另存为shp文件一、dbf文件解读 我们可以通过Excel或FME等多种软件查看dbf的结构,字段有:Name,kind,Lat,…...
图像亮度调整
非线性方式 调整图像的方法有很多,最常用的方法就是对图像像素点的R、G、B三个分量同时进行增加(减少)某个值,达到调整亮度的目的。即改变图像的亮度,实际就是对像素点的各颜色分量值做一个平移。这种方法属于非线性的…...
精简版SDL落地实践
一、前言一般安全都属于运维部下面,和上家公司的运维总监聊过几次一些日常安全工作能不能融入到DevOps中,没多久因为各种原因离职。18年入职5月一家第三方支付公司,前半年在各种检查中度过,监管形势严峻加上大领导对安全的重视(主…...
第一回:Matplotlib初相识
一、认识matplotlib Matplotlib是一个Python 2D绘图库,能够以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形,用来绘制各种静态,动态,交互式的图表。 Matplotlib可用于Python脚本,Python和IPython Shell、…...
怎么找回电脑删除的图片
怎么找回电脑删除的图片?图片作为一种非常简单方便的文件,经常被用来辅助我们的日常工作和学习。但在我们整理电脑时,如果我们不小心手一抖就删除了一些重要的图片,遇到这种事我们要如何才能恢复呢? 众所周知,简单的删除并不会完…...
【Linux】进程状态与进程优先级
目录一.进程状态1.阻塞:2.挂起:具体情况3.具体操作系统状态变化R:运行状态(running)S:休眠状态(sleeping)D:磁盘休眠状态(Disk sleep)T:暂停状态(stopped)暂停进程继续进程t:追踪暂停状态(traci…...
Python+Qt生日提醒
PythonQt生日提醒如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!前言这篇博客针对<<PythonQt生日提醒>>编写代码,代码整洁,规则,易读。 学习与应用推荐首选。文章目…...
第二章 编写MBR主引导记录
主引导记录(MBR,Master Boot Record)是采用MBR分区表的硬盘的第一个扇区,即C/H/S地址的0柱面0磁头1扇区,也叫做MBR扇区 计算机的启动过程 为什么程序要载入内存 CPU的硬件电路被设计成只能运行处于内存中的程序&…...
Android 9.0 仿ios的hotseat效果修改hotseat样式
1.概述 在9.0的系统rom定制化的产品中,在launcher3的定制化需求中,有很多功能需求点需要开发,在对一下ui的定制化的过程中,会参考ios的样式进行定制化,所以最近项目需求 要求仿ios的hotseat的样式来进行产品的定制,开发一款仿ios的hotseat,所以需要对hotseat进行分析,然…...
量化私募投资百亿头部量化私募企业在招岗位:AI算法工程师21/22/23届,校招/秋招/社招都看年base60-200万
量化私募投资百亿头部量化私募企业在招岗位:AI算法工程师21/22/23届,校招/秋招/社招都看年base60-200万bonuscut965制度应届需要985本硕博有3年以上相关ai算法经验可放宽学历"岗位职责:base 北京 上海 杭州 深圳1. 利用机器学习、深度学习和人工智能…...
百度西交大大数据菁英班目标检测竞赛
来源:投稿 作者:LSC 编辑:学姐 数据介绍 数据集共包括40000张训练图像和1000张测试图像,每张训练图像对应xml标注文件: 共包含3类:0:head, 1:helmet, 2:person。 提交格式要求,提交名为pred_r…...
[具身智能-250]:吾生也有涯,而知也无涯:深度学习的“模糊”智慧与泛化本质
“吾生也有涯,而知也无涯。”模糊的智慧。深度神经网络泛化能力强的本质是,通过数学公式构建最小神经元单元,然后进一步构建庞大的神经网络模型,该模型仅仅依赖历史经验,依赖过往数据的相似性、可能性,即概…...
【软考高级】系统架构设计师核心考点精讲与实战应用
1. 系统架构设计师考试概述 系统架构设计师是软考高级资格认证中的一项重要考试,主要面向从事系统架构设计、技术选型和项目管理的专业人员。这个认证不仅考察理论知识,更注重实际架构设计能力的评估。考试分为综合知识、案例分析和论文三个部分…...
DXVK:突破Linux游戏性能瓶颈的Vulkan转换层解决方案
DXVK:突破Linux游戏性能瓶颈的Vulkan转换层解决方案 【免费下载链接】dxvk Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk 技术价值:重新定义Linux游戏图形渲染标准 填…...
ai辅助qt性能优化:让快马平台帮你设计多线程数据可视化方案
最近在开发一个Qt实时数据可视化应用时,遇到了主界面卡顿的问题。经过分析发现,数据采集和处理操作直接在主线程执行,导致UI响应延迟。通过InsCode(快马)平台的AI辅助功能,我快速获得了一个多线程优化方案,效果显著。这…...
效率倍增:将matlab算法思路在快马平台秒级转化为可运行web应用
今天想和大家分享一个提升算法验证效率的小技巧——如何把MATLAB里的算法思路快速转化为可运行的Web应用。作为一个经常需要验证信号处理算法的人,我发现MATLAB虽然强大,但每次启动软件、初始化项目都要耗费不少时间。后来尝试用InsCode(快马)平台后&…...
DepotDownloader核心功能解析:从App下载到工作坊内容获取的完整指南
DepotDownloader核心功能解析:从App下载到工作坊内容获取的完整指南 【免费下载链接】DepotDownloader Steam depot downloader utilizing the SteamKit2 library. 项目地址: https://gitcode.com/gh_mirrors/de/DepotDownloader DepotDownloader是一款功能强…...
ml.js数据预处理完全教程:从数组操作到特征工程
ml.js数据预处理完全教程:从数组操作到特征工程 【免费下载链接】ml Machine learning tools in JavaScript 项目地址: https://gitcode.com/gh_mirrors/ml/ml 在机器学习项目中,数据预处理是决定模型性能的关键步骤。ml.js作为一个强大的JavaScr…...
零基础也能快速上手AI建站工具:手把手教你10分钟生成网站
很多人想建站但一直被技术门槛劝退,觉得需要代码、会设计、能写文案。其实现在用AI建站工具,这些都可以交给机器。这套通用教程不针对某个具体工具,而是拆解任何零基础建站工具都适用的核心操作步骤。跟着做,你也能在10分钟左右从…...
BiliTools:解锁B站学习新姿势,5分钟掌握视频AI总结与智能下载
BiliTools:解锁B站学习新姿势,5分钟掌握视频AI总结与智能下载 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bili…...
实战应用:在快马平台用jdk1.8的Stream API快速实现订单数据统计与分析
最近在做一个电商后台的数据分析需求时,发现用Java 8的Stream API处理集合数据特别高效。正好在InsCode(快马)平台上实践了一下,分享这个模拟订单统计的实战案例。 订单类设计 首先定义了一个订单类,包含订单ID、金额、客户类型和创建日期四个…...
