http://phoenix-zh.cn/2020/11/04/NOJ-旅游预算/

旅游预算

描述

一个旅行社需要估算乘汽车从某城市到另一城市的最小费用,沿路有若干加油站,每个加油站收费不一定相同。旅游预算有如下规则: 若油箱的油过半,不停车加油,除非油箱中的油不可支持到下一站;每次加油时都加满;在一个加油站加油时,司机要花费2元买东西吃;司机不必为其他意外情况而准备额外的油;汽车开出时在起点加满油箱;计算精确到分(1元=100分)。编写程序估计实际行驶在某路线所需的最小费用。

输入

第一行为起点到终点的距离(实数) 第二行为三个实数,后跟一个整数,每两个数据间用一个空格隔开。其中第一个数为汽车油箱的容量(升),第二个数是每升汽油行驶的公里数,第三个数是在起点加满油箱的费用(精确到分),第四个数是加油站的数量。(〈=50)。接下去的每行包括两个实数,每个数据之间用一个空格分隔,其中第一个数是该加油站离起点的距离,第二个数是该加油站每升汽油的价格(元/升)。加油站按它们与起点的距离升序排列。所有的输入都有一定有解。

输出

共两行,每行都有换行 第一行为一个实数和一个整数,实数为旅行的最小费用,以元为单位,精确到分,整数表示途中加油的站的N。第二行是N个整数,表示N个加油的站的编号,按升序排列。数据间用一个空格分隔,最后一个数据后也输出空格,此外没有多余的空格。

输入样例

516.3 15.7 22.1 20.87 3 125.4 1.259 297.9 1.129 345.2 0.999

输出样例

38.09 1

2

思路

由题意可知:如果在第i个加油站要加油,必须保证到达第i+1个加油站的时候油箱的油少于一半。并且一旦加油,油箱的油就加满了。dp[i]表示到达第i个加油站的最小耗费,初始化为1e9(无穷大)。dp[0]: 起点加满油箱的费用 。a[i].d表示第i个加油站距离起点的距离,a[i].w表示第i个加油站加油的单价费用。枚举当前到达的加油站i(i from 1 to n),然后再枚举上一次加油的加油站j(j from 0 to i-1,0就是起点)。if(a[i].d-a[j].d>road||(a[i].d-a[j].d) * 2<road)如果无法从j到达i或者从j到达i油箱油量过半都无法考虑,其余的情况dp[i]=min(dp[i],dp[j]+ned * a[i].w+2),因为最后答案要输出在哪些加油站加了油,所以需要记录上一次加油的加油站pre[i]=j;最后再看从哪个加油站i到终点代价最小(i from 0 to n),必须保证油量可以从i到终点,ans为最终答案,ans=min(ans,dp[i]),并且记录最后一个加油站last。由last为终点前的加油站,进行回溯查询加过油的加油站。

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1000+50;
struct Node{double w,d;
}a[maxn];
double s,v,p,dp[maxn];int n,pre[maxn],t[maxn];
double min(double x,double y){if(x<=y)return x;return y;
}
int main(){int i,j;cin>>s>>v>>p>>dp[0]>>n;for(i=1;i<=n;i++)cin>>a[i].d>>a[i].w,dp[i]=1e9;double road=v*p;for(i=1;i<=n;i++){for(j=0;j<=i-1;j++){if(a[i].d-a[j].d>road||(a[i].d-a[j].d)*2<road)continue;//注意油量超过一半并且可以到达下一个点不加油! double ned=(a[i].d-a[j].d)/p;if(dp[i]>dp[j]+ned*a[i].w+2){dp[i]=dp[j]+ned*a[i].w+2;pre[i]=j;}}}double ans=0x3f3f3f3f;int last=0,tot=0;for(i=0;i<=n;i++){if(road<s-a[i].d)continue;if(ans>dp[i]){ans=dp[i];last=i;}}while(last!=0){t[++tot]=last;last=pre[last];}printf("%.2lf %d\n",ans,tot);for(i=tot;i>=1;i--)cout<<t[i]<<' ';cout<<endl;return 0;
}

NOJ-1149-旅游预算相关推荐

  1. 【NOJ1149】【算法实验四】旅游预算

    1149.旅游预算 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 一个旅行社需要估算乘汽车从某城市到另一城市的最小费用,沿路有若干加油站,每个加油站收费不一定相同.旅游预算有 ...

  2. 【NOJ1149】【算法实验四】【DP_动态规划】旅游预算/加油站问题

    1149.旅游预算 时限:1000ms 内存限制:10000K  总时限:3000ms 描述 一个旅行社需要估算乘汽车从某城市到另一城市的最小费用,沿路有若干加油站,每个加油站收费不一定相同. 旅游预 ...

  3. NOJ1149 旅游预算(动态规划)

    本菜不会写,看了别人的博客才恍然大悟,细节很多,具体再注释中可以体现. 友情链接: https://blog.csdn.net/zhao2018/article/details/83420944 // ...

  4. GMO Research 2022年旅游调查:旅游业有望强劲增长

    GMO Research (TOKYO: 3695)最近进行的一项旅行调查显示,随着边境再次开放,亚洲正在逐渐恢复正常的旅行模式.尽管该地区仍没有达到疫情前水平,旅行者仍持谨慎态度,但他们对海外旅行的 ...

  5. 2021年美国假日旅游现状分析:新年的圣诞节、圣诞节前的十二月计划出行旅游的占比大[图]

    随着假日旅游产业的不断发展壮大,假日旅游已经成为新的经济增长点.21世纪美国人不在假日旅行的占58%:假日旅游季节的占42%:将乘坐飞机和/或在pald住宿的占28%:开车去拜访家人或朋友的占14%. ...

  6. 尼尔森:2018年大陆旅客每次赴港旅游花费21000港元

    -超过90%的内地访港旅客表示将在未来12个月内再度来港,并在旅游预算上有4%的增长. 随着港珠澳大桥和高铁的开通,香港与内地更多城市的连接性得以加强.与2017年相比,愈来愈多内地旅客选乘长途车或直 ...

  7. 算法的封装与切换——策略模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/7818983 俗话说:条条大路通罗马.在很多情况下,实现某个目标的途径不止一条,例如我们在外 ...

  8. activeti user guide 中文_【澳洲大岩石】最好季节发团!省掉800澳币!无比震撼特价 再次应约出发 震撼之旅!一生难忘!全程中文导游!省心放心澳洲青年旅行社...

    请点击"澳洲青年旅行社"关注我们!! 2020最新旅游信息早知道!    澳 洲 青 年 旅 行 社   复活假期绝佳机会 无比震撼再次发团 澳洲大岩石 - 澳洲中部最知名的观光胜 ...

  9. 设计模式之十一个行为型模式的相关知识,简单易懂。

    一.    职责链模式-Chain of Responsibility Pattern 1)  请求的链式处理--职责链模式(一) "一对二","过",&quo ...

最新文章

  1. Scala学习(八)练习
  2. 简单介绍android studio中的Logcat
  3. docker学习路程之部署一个nginx
  4. machit r语言_机器学习应该准备哪些数学预备知识?
  5. Android开源框架源码鉴赏:LruCache与DiskLruCache
  6. Memcached学习---(2)Linux Memcached 安装
  7. html监控服务器状态,HTML5-WebSocket实现对服务器CPU实时监控
  8. 测测实际带宽,预防使用“假带宽”
  9. 用python实现列线图绘制
  10. 今日科技联播:全球区块链专利申请数超5000件,Coinplug第一阿里紧随其后
  11. Introduction to CMake by Example
  12. 【马司机带带我】君子日三省吾身
  13. python2.7安装教程windowsxp_怎么在windows xp 下安装python 2.7
  14. 「微信群合影2.3.0」- 新增高清头像
  15. python与医学统计_医学统计思维-数据库
  16. SkyWalking仪表盘
  17. 选择与放弃决定着你的生命
  18. Python合并Excel相同连续单元格(已排序)
  19. 【JavaSE】包装类基本使用
  20. 软件测试sd卡真伪,亲测,拼多多上买的SD卡到底是不是正品

热门文章

  1. 不懂带团队,你就自己累!教你如何成为顶尖管理者!
  2. 使用django创建一个简单的APP应用
  3. 双评价技术指南2020_“双评价”技术指南(11月份版)解读
  4. Crytek CryEngine 3新特性完全详解
  5. 6-4 结构体-查找最低分
  6. 克鲁斯卡尔算法图(邻接矩阵)
  7. XP SP2及之后的补丁集成法
  8. 【机器学习速成宝典】模型篇02线性回归【LR】(Python版)
  9. Shiro-----Shiro入门简介
  10. 多张图片合成一张的ps技术