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

题目描述

代码如下:

 #include <stdio.h>
#define MAX 10001 int main(void)
{
int n;
double d1,c,d2,p;
double distance[MAX]; //油站i离出发点的距离Di
double price[MAX]; //各油站的价格Pi
double res = ; //最小费用
double surplus = ; //油箱剩余量
int i,j; scanf("%lf%lf%lf%lf%d",&d1,&c,&d2,&p,&n); distance[] = ;
distance[n+] = d1; //最后处油站为终点
price[] = p; //出发点油站价格 for (i= ; i<=n ; i++)
{
scanf("%lf%lf",&distance[i],&price[i]);
if (distance[i]-distance[i-] > c*d2) //两油站距离大于汽车最大行驶距离
{
printf("No Solution\n");
return ;
}
}
if (d1-distance[n] > c*d2)
{
printf("No Solution\n");
return ;
} i = ; //油站编号
while (i <= n)//汽车所在油站的位置
{
for (j=i+ ; j<=n+ ; j ++)
{
if (distance[j]-distance[i] < (c-surplus)*d2) //查找最大行驶距离内的较低价油站
{
if (price[j] < price[i]) //找到较低价油站
break;
}
else //当前油站价格最低
{
j --; //记录最大行驶距离内的最远端油站
break;
}
} if (price[j] < price[i])//增加可以刚好抵达j点处油站油量(价格较低)
{
res += ((distance[j]-distance[i])/d2 - surplus)*price[i];
surplus = ;//刚好到达j点处油站,油耗完
}
else //当前位置油价最低,加满油箱
{
res += (c-surplus)*price[i];
surplus = c - (distance[j]-distance[i])/d2;
}
i = j; //汽车行驶到第j个油站/终点
} printf("%.2lf\n",res);
return ;
}

C解法

解题思路:

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

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

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

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

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

  

[蓝桥杯]ALGO-15.算法训练_旅行家的预算的更多相关文章

  1. 蓝桥杯 算法训练 ALGO-15 旅行家的预算

    算法训练 旅行家的预算   时间限制:1.0s   内存限制:256.0MB 问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车 ...

  2. Java实现蓝桥杯 算法训练 ALGO-15 旅行家的预算

    问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...

  3. 蓝桥杯练习系统— 算法训练 Beaver's Calculator

    问题描述 从万能词典来的聪明的海狸已经使我们惊讶了一次.他开发了一种新的计算器,他将此命名为"Beaver's Calculator 1.0".它非常特别,并且被计划使用在各种各样 ...

  4. 蓝桥杯练习系统算法训练习题加答案java版本

    附上百度文库的链接:http://wenku.baidu.com/view/afb78d36b42acfc789eb172ded630b1c59ee9bf7

  5. [蓝桥杯]ALGO-116.算法训练_最大的算式

    问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号 ...

  6. ALGO-143_蓝桥杯_算法训练_字符串变换

    问题描述 相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了.今天,徐老师想测试一下大家对于字符串操作的掌握情况.徐老师自己定义了1,,,,5这5个参数分别指代不同的5种字符串操作, ...

  7. ALGO-6_蓝桥杯_算法训练_安慰奶牛

    记: 本题目考的是最小生成数,可使用Kruskal算法 第一次,20分 原因:使用动态数组,有概率报运行错误(大雾= =) 第二次,100分 原因:改用静态数组,一次过 示例代码: #include ...

  8. ALGO-5_蓝桥杯_算法训练_最短路

    记: 一开始没接触过关于最短距离的算法,便开始翻阅关于图的知识, 得知关于最短距离的算法有Dijkstra算法(堆优化暂未看懂),Bellman-Ford算法,Floyd算法,SPFA算法. 由于数据 ...

  9. [蓝桥杯]ALGO-20.算法训练_求先序排列

    问题描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=). 输入格式 两行,每行一个字符串,分别表示中序和后序排列 输出格式 一个字符串,表示所求 ...

随机推荐

  1. Java匿名内部类的继承者、终结者————lambda表达式

    一.什么是lambda表达式? lambda表达式就是一个代码块,可以传入变量和放入相应的代码. 二.基本格式  (参数 ) - >{                      代码       ...

  2. galera cluster,mysql配置wsrep_notify_cmd参数,增加邮件告警

    vi /usr/local/sunlight/wsrep_notify_cmd.sh chown mysql:mysql  /usr/local/sunlight/wsrep_notify_cmd.s ...

  3. html播放音乐

    如何在网站网页中添加音乐代码 告诉你多种格式文件的详细使用代码.    width_num——指定一个作为宽度的数字:    height_num——指定一个作为高度的数字:     1.mp3    ...

  4. PAT-L2-006(根据后序中序遍历建立树)

    #include <bits/stdc++.h> using namespace std; ; queue <int> q; int a[N]; int b[N]; int n ...

  5. day 016 面向对象---类与类的关系

    ---恢复内容开始--- 一  依赖关系(最轻的一种关系,在方法中引入另一个类的对象) class Elephant: def __init__(self,name): self.name=name ...

  6. CodeForces 682A

    D - Alyona and Numbers Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Sub ...

  7. 微处理器CPU 50年

    CPU50年 ===电子管时期1912年:美国青年发明家德.福雷斯特(L.De Forest)在帕洛阿托小镇首次发现了电子管的放大作用.1946年:地球上第一台电子数字式计算机(ENIAC(埃尼阿克) ...

  8. 记录一次追查server死机& 登录异常情况

    linux 服务器死机了,于是追查原因. 查看boot.log wade@koala:/var/log$ less boot.log 看不出异常 显示开机信息 wade@koala:/var/log$ ...

  9. Go Example--协程

    package main import "fmt" func main() { //main gorouting中调用f函数 f("direct") //重新建 ...

  10. MySQL Lock--并发插入导致的死锁

    ============================================================================ 测试脚本: 表结构: CREATE TABLE ...