博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[蓝桥杯]ALGO-15.算法训练_旅行家的预算
阅读量:4882 次
发布时间:2019-06-11

本文共 2509 字,大约阅读时间需要 8 分钟。

 

问题描述  一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1、汽车油箱的容量C(以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di、每升汽油价格Pi(i=1,2,……N)。计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出“No Solution”。输入格式  第一行为4个实数D1、C、D2、P与一个非负整数N;  接下来N行,每行两个实数Di、Pi。输出格式  如果可以到达目的地,输出一个实数(四舍五入至小数点后两位),表示最小费用;否则输出“No Solution”(不含引号)。样例输入275.6 11.9 27.4 2.8 2102.0 2.9220.0 2.2样例输出26.95
题目描述

 

代码如下:

1 #include 
2 #define MAX 10001 3 4 int main(void) 5 { 6 int n; 7 double d1,c,d2,p; 8 double distance[MAX]; //油站i离出发点的距离Di 9 double price[MAX]; //各油站的价格Pi10 double res = 0; //最小费用 11 double surplus = 0; //油箱剩余量 12 int i,j;13 14 scanf("%lf%lf%lf%lf%d",&d1,&c,&d2,&p,&n);15 16 distance[0] = 0; 17 distance[n+1] = d1; //最后处油站为终点 18 price[0] = p; //出发点油站价格 19 20 for (i=1 ; i<=n ; i++) 21 {22 scanf("%lf%lf",&distance[i],&price[i]);23 if (distance[i]-distance[i-1] > c*d2) //两油站距离大于汽车最大行驶距离 24 {25 printf("No Solution\n");26 return 0;27 }28 }29 if (d1-distance[n] > c*d2)30 {31 printf("No Solution\n");32 return 0;33 }34 35 i = 0; //油站编号 36 while (i <= n)//汽车所在油站的位置 37 {38 for (j=i+1 ; j<=n+1 ; j ++)39 {40 if (distance[j]-distance[i] < (c-surplus)*d2) //查找最大行驶距离内的较低价油站 41 {42 if (price[j] < price[i]) //找到较低价油站 43 break; 44 }45 else //当前油站价格最低 46 {47 j --; //记录最大行驶距离内的最远端油站 48 break;49 } 50 } 51 52 if (price[j] < price[i])//增加可以刚好抵达j点处油站油量(价格较低) 53 {54 res += ((distance[j]-distance[i])/d2 - surplus)*price[i];55 surplus = 0;//刚好到达j点处油站,油耗完 56 } 57 else //当前位置油价最低,加满油箱 58 { 59 res += (c-surplus)*price[i];60 surplus = c - (distance[j]-distance[i])/d2;61 }62 i = j; //汽车行驶到第j个油站/终点 63 }64 65 printf("%.2lf\n",res);66 return 0;67 }
C解法

 

解题思路:

1.每次输入Di时,判断两油站之间的距离是否大于汽车满油箱时行驶的最大距离,若是则输出"No Solution"

2.开始计算最小费用,每次在汽车满油箱可以行驶的最大距离内,查找是否存在比当前油价低的油站

  2.1.找到较低价的油站:往油箱加可以到达较低价油站的油量,并刚好行驶到较低价油站。

  2.2.当前油站为最低价:往油箱加满油,并行驶到行程内最远端的油站。

 

贪心思想:每次在最大行程内,向油箱添加当前情况下的最低价油量,确保最后的费用最少

  

 

转载于:https://www.cnblogs.com/mind000761/p/10301675.html

你可能感兴趣的文章
codility: CountTriangles
查看>>
赛斯说
查看>>
python 中的pipe
查看>>
(SQL Analyzer services)定义链接维度
查看>>
squid
查看>>
系统开发管理、架构与设计步步谈随笔索引
查看>>
Java的时间空间复杂度详解
查看>>
有效防止SQL注入漏洞
查看>>
Linux chown命令
查看>>
十、I/O流——4-输入、输出流体系
查看>>
十二、网络编程——4-基于UDP协议的网络编程
查看>>
异常处理与调试6 - 零基础入门学习Delphi55(完)
查看>>
if语句三种形式
查看>>
正则表达式之字符串验证
查看>>
codeblocks如何支持_tmain?可移植代码的编码推荐
查看>>
省市联动 填坑
查看>>
canvas写的一个小时钟demo
查看>>
原来今天是冬至
查看>>
又混了一天班
查看>>
九度oj 1006
查看>>