P1016 旅行家的预算

洛谷 P1016 [NOIP1999 提高组] 旅行家的预算【贪心】 首先考虑一下简化版,首先我们认为汽车油箱的容量是无限的,那么这个题目就简单多了,每个位置城市肯定都是从当前位置前面所有的城市中油价最低的城市过来,这样就能保证总花费最少,但是这个题目难就难在汽车的容量是有限制的,这就相当于把这个题目加了一个限制,就是当前位置城市只能从当前位置城市前面一定区间内的城市转移过来,下面我们考虑一种贪心策略。那么为什么加到能刚好到达下一个到达的城市就是最优的,因为我们找到的下一个城市油价更低,在当前位置多加一些油,不如到下一个城市在加,因为下一个城市花费更低。 阅读详情

题目描述

一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1、汽车油箱的容量C(以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P和沿途油站数N(N可以为零),油站ii离出发点的距离Di、每升汽油价格Pi(i=1,2,…,Ni=1,2,…,N)。计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出“No Solution”。

输入格式

第一行,D1,C,D2,P,N。

接下来有N行。

第i+1行,两个数字,油站i离出发点的距离Di和每升汽油价格Pi。

输出格式

所需最小费用,计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出“No Solution”。

输入输出样例

输入 #1

275.6 11.9 27.4 2.8 2
102.0 2.9
220.0 2.2

输出 #1

26.95

说明/提示

N≤6,其余数字≤500

#include<bits/stdc++.h>
using namespace std;

double d[7], pi[7];

int main()
{
    int n;
    double pmin = 501, money = 0, co = 0;//d0:移动距离 pmin:下一个最低油价 co:油箱中油量
    double d1, c, d2, p, d0 = 0;
    cin >> d1 >> c >> d2 >> p >> n;
    d[0] = 0;
    pi[0] = p;
    double maxL = c * d2;//加满油最大路程
    for(int i = 1;i <= n;i++)
        cin >> d[i] >> pi[i];
    for(int i = 1;i <= n;i++)//两相邻加油站超最大距离则No Solution
        if(d[i] - d[i - 1] > maxL)
        {
            cout << "No Solution" << endl;
            return 0;
        }
    int ans = 0;
    while(d1 - d0)//d1 - d0 = 0 则到达终点
    {
        for(int i = ans + 1;d[i] - d0 <= maxL&&i <= n;i++)
        {
            if(pi[i] < pmin)
            {
                pmin = pi[i];
                ans = i;
            }
        }
        if(pmin <= p)//范围类比上一站便宜
        {
            money += ((d[ans] - d0)/d2 - co)*p;
            co = (d[ans] - d0)/d2;
        }
        else if(d1 - d0 > maxL)//范围类没有更便宜的,且不能一次到终点,直接加满
        {
            money += (c - co)*p;
            co = c;
        }
        else//无更便宜,且能一次到终点
        {
            money += ((d1 - d0)/d2 - co)*p;
            break;
        }
        co = co - (d[ans] - d0)/d2;
        d0 = d[ans];
        p = pmin;
        pmin = 501;
    }
    printf("%.2lf", money);
    return 0;
}

经典贪心题精讲:从洛谷P1016旅行家的预算到通用解题模板 贪心算法是计算机算法竞赛中的基础与核心之一,其本质是在每一步局部决策中追求当前最优,从而在特定条件下达成全局最优。这类算法广泛应用于路线规划、资源调度和路径优化等工程实践场景。在实际应用中,实现贪心往往需要结合模拟技术,处理排序、结构体、边界条件与浮点精度等细节,尤其是当涉及货币计算时,浮点误差可能直接影响结果正确性。本文以一道路程与油价相关的经典竞赛题目为切入点,详细介绍贪心加模拟的建模方法,包括将终点虚拟为价格为零的站点、在可达范围内选择价格更低或最低的加油站等关键决策技巧。文章同时关注备考过程中的常见 阅读详情

相关推荐

洛谷P1016 旅行家的预算

目录1.题面题目描述输入格式输出格式输入输出样例输入输出说明/提示2.解题思路:反复贪心3.代码实现 1.题面 题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1、汽车油箱的容量C(以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P和沿途油站数N(N可以为零),油站ii离出发点的距离Di、每升汽油价格Pi(i=1,2,…,...

Yang Xiaqing的博客 524

codevs 1046 旅行家的预算(贪心)

*PS:原来加油是不需要一升一升加的么qwq 题目描述 Description 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1、汽车油箱的容量C(以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di、每升汽油价格Pi(i=1,2,……N)。计算结果四舍五入至小数点后两位。如果无法

Loi_Mapleleaf的小池 584

Renesas:定时器输入捕获

一、PWM输入捕获 1、Smart Configurator配置 注意:在使用前,需要使能对应的定时器!否侧无法正常进行输入捕获! 2、脉冲宽度的获取 如何区分高低电平的脉冲宽度:最常用的方法就是在触发中断后,判断IO口的高低电平,来确认是上升沿触发的中断还是下降沿触发的中断。 若无法进入中断,可查看:Renesas:配置中断的常规流程 (1)中断方式(Smart Configurator生成的代码) #pragma interrupt r_Config_TAUB0_0_i...

不吃鱼的猫的博客 2481

贪心算法解旅行家的预算问题

贪心算法解旅行家的预算问题 题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1汽车油箱的容量C(以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di、每升汽油价格Pi(i=1,2,…,N)。计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出“No Solution”。 输入格式 第一行,D1,C,D2,P,N。 接下来有N行。 第i+1行,两个数字,油站i离出发点的距离Di

qq_41117896的博客 1862

攻克JESD204B多ADC同步:从时钟对齐到数据对齐的实战解析

本文深入解析了JESD204B多ADC同步的系统性挑战与实战解决方案。从确保设备时钟同源、精确捕获SYSREF信号,到管理接收端弹性缓冲区与释放点,文章提供了从时钟对齐到数据对齐的完整调试路径与排查清单,是攻克高速数据采集系统中多片ADC同步难题的实用指南。

weixin_29231725的博客 197

Cadence导入tsmcN65GP PDK的完整流程与常见问题解析

本文详细介绍了Cadence导入tsmcN65GP PDK的完整流程,包括文件解压、目录结构解析、安装脚本运行及Cadence集成配置。重点解析了常见问题如文件路径错误、权限问题和工艺库显示不全的解决方案,并提供了实战技巧与优化建议,帮助用户高效完成PDK安装与配置。

weixin_29215391的博客 546

蓝桥杯训练——旅行家预算(贪心算法)

旅行家预算 贪心算法 蓝桥杯

xushuo的博客 1342

Cadence17.2 > Allegro > 检查PCB Layout信号线组等长

Cadence17.2 > Allegro > 检查PCB Layout等长和配线

DL_62532的专栏 1万+

贪心算法——旅行家的预算(NOIP1999)

1、旅行家的预算(NOIP1999) 问题描述: 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1、汽车油箱的容量C(以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P和沿途油站数N(0 <= N <= 100),油站i离出发点的距离Di、每升汽油价格Pi(i=1,2,……N)。计算结果四舍五入至小数点后两位。如果无...

Psychosocial的博客 3199

某物data魔改与变种算法还原(含加解密Py纯算)

某物data加解密、设备指纹魔改、变异、自定义加密分析与纯算还原

吴秋霖的博客 1281

【AI 智能体】Windows 环境 Hermes Agent(爱马仕)安装详细过程

Windows 环境 Hermes Agent(爱马仕)安装详细过程

congge_study的博客 1828

洛谷P1016(旅行家的预算)

洛谷P1016   这一题,有点麻烦,本来想用滚动数组的,就像P1004那样,但是有个问题,里面涉及到汽车油量的问题,如果前面的油没用完,那么会影响到后面的花费问题,也就是说,它们并不是一个相互独立的问题,而是相互关联的。   但是我们可以结合实际去考虑这一题,现实生活中,我们如果进行长途旅行,如果两个加油站之间的距离,就算我们用完汽车油箱里所有油都到不了,那就只能输出"No Solution"了,表示我们无能为力啊,实在到不了。然后就算我们到得了,也要考虑花费问题,毕竟省下来的钱我们可以用来买好多好吃的。

ly3098268698的博客 660

【WRF-Chem教程-附录B】使用 MOZART 与WRF-Chem

使用MOZART与WRF-Chem

WW、forever的博客 242

洛谷 P1016 旅行家的预算 Java解法

package com.two; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); double D1 = sc.nextDouble();// 两个城市之间的距离 double C = sc.nextDouble();// 汽车油箱中油的容量 double D2 = sc.nextDoubl.

青柠小甜味 326

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java 旅行家的预算_洛谷 P1016 旅行家的预算

P1016 旅行家的预算题目OJ链接https://www.luogu.org/problemnew/show/P1016题目描述一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1、汽车油箱的容量C(以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di、每升汽油价格Pi(i=1,2...

weixin_42104181的博客 295

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

洛谷 P1016 旅行家的预算 Java详解

import java.util.Scanner; public class Demo01 {//贪心算法 public static void main(String[] args) { Scanner sc = new Scanner(System.in); double D1 = sc.nextDouble(); double C = sc.nextDouble(); double D2 = sc.nextDouble(); double P = sc.nextDouble().

青柠小甜味 271

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java 旅行家的预算_洛谷 P1016 旅行家的预算 Java解法

洛谷 P1016 旅行家的预算 Java解法洛谷 P1016 旅行家的预算 Java解法package com.two;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);double D1 = sc.nextD...

weixin_39595621的博客 259

记录--P1016 [NOIP 1999 提高组] 旅行家的预算

已经写在代码注释里了,看不懂可以评论区交流。

LU_Yunwqy的博客 278

洛谷P1016 [NOIP1999 提高组] 旅行家的预算 题解

例:5 6 10000 2,若5到10000多一点点,6到2,最优解是5先到6,6到2。即找到自己能到的最小的,同时加满油,这样6到2的一大段路用的就是5油价的油。例:(按位置顺序,油价)5 4 3,若5可以到3,那也应该是先到4,4加上油以后到3会便宜一点。所以只要价格比自己小的,优先去离自己近的。2.如果前方没有比自己小的,找到前方最小的,同时给自己加满油,到那个点。1.在自己能到达的前方区域找到比自己小的,进行替换。题目还是比较水的,数据量小,也没有负数的情况。

weidong3274的博客 666

打卡信奥刷题(913)用C++信奥P1016[普及组/提高] [NOIP 1999 提高组] 旅行家的预算

一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1​、汽车油箱的容量C(以升为单位)、每升汽油能行驶的距离D2​、出发点每升汽油价格P和沿途油站数NN可以为零),油站i离出发点的距离Di​、每升汽油价格Pi​i12N计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出。

Loge谈信奥--一个专注于信奥人的博客 5486

P1016旅行家的预算(贪心一下)

题目简单描述一下一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离 D1​、汽车油箱的容量 C(以升为单位)、每升汽油能行驶的距离 D2​、出发点每升汽油价格P和沿途油站数 N(N 可以为零),油站 i 离出发点的距离 Di​、每升汽油价格 Pi​(i=1,2,…,N)。计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出。

2403_87503474的博客 538

洛谷P1016旅行家 的预算

既然题目要求就是求出最小的花销,那么假如考虑贪心的话,就需要确定一个范围,一个属于贪心的范围,因此我采用先求出假如当前油箱是满的,则车能走的距离,在能走到距离当中,假如有加油站的油价比当前低,则退出循环,计算从当前站点到比自己油价低站点的花销,也就相当于现实生活中,先估计自己能走多远,在能走的距离中确定好加油站,再在最便宜的加油站的加油”此时可以不考虑油箱中剩余多少油“,因为我们计算的花销就是从当前油站到比自己便宜的油站的花费的油。第一行,$D_1$,$C$,$D_2$,$P$,$N$。

qq_65599748的博客 522

(贪心)P1016 旅行家的预算

P1016 旅行家的预算 应用 题库训练比赛记录讨论 3.8K通过 10.4K提交 题目提供者CCF_NOI 评测方式云端评测 标签NOIp提高组1999 难度普及+/提高 时空限制1000ms / 128MB 提交题解 提示:收藏到任务计划后,可在首页查看。 最新讨论显示 推荐的相关题目显示 题目描述 一个旅行家想驾驶汽车以最少的费用从一个城...

black_horse2018的博客 671
上一篇: p1510回文数
下一篇: P1177: 三角形
代维7
博客等级 码龄6年 1万+粉丝 535原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值