算法训练 旅行家的预算

2020-02-23 16:01:10来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

算法训练 旅行家的预算

资源限制 时间限制:1.0s   内存限制:256.0MB 问题描述   一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离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 2
102.0 2.9
220.0 2.2 样例输出 26.95   采用贪心法,每次都加满油,到地方如果更便宜,则将剩下的油换为便宜的油 代码:
 1 #include <iostream>
 2 #include <vector>
 3 #include <iomanip>
 4 using namespace std;
 5 //zq
 6 int main() {
 7     double D1,C,D2,P,sum=0,tank;
 8     int N,flag=1;
 9     vector<double>Di,Pi;
10     cin>>D1>>C>>D2>>P>>N;
11     tank=C;
12     Di.push_back(0);
13     Pi.push_back(P);
14     for (int i=1; i<=N; ++i) {
15         double tmpD,tmpP;
16         cin>>tmpD>>tmpP;
17         Di.push_back(tmpD);
18         Pi.push_back(tmpP);
19     }
20     Di.push_back(D1);
21     Pi.push_back(0);
22     double p0 = Pi[0];
23     sum += tank * Pi[0];
24     double distance,need;
25     for (int i=1; i<N+2; ++i) {
26         distance = Di[i] - Di[i-1];
27         need = distance /D2;
28         if (tank * D2 >= distance) {
29             tank -= need;
30             if (Pi[i] < p0) {
31                 sum -= tank * p0;
32                 tank = C;
33                 sum += tank * Pi[i];
34                 p0 = Pi[i];
35             } else{
36                 if (tank * D2 < (Di[i+1] - Di[i])) {
37                     sum += (C-tank)*Pi[i];
38                     tank = C;
39                     p0 = Pi[i]; 
40                 }
41             }
42         } else{
43             cout<<"No Solution"<<endl;
44             flag = 0;
45             break;
46         }
47     }
48     if (flag!=0) {
49         cout<<fixed<<setprecision(2)<<sum;
50     }
51     return 0;
52 }

 


原文链接:https://www.cnblogs.com/zq-dmhy/p/12350448.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:十六进制转换

下一篇:协程的原理(Coroutine Theory)