zoukankan      html  css  js  c++  java
  • 洛谷1016 旅行家的预算

    题目描述

    一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离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和每升汽油价格Pi。

    输出格式:

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

    输入输出样例

    输入样例#1:

    275.6 11.9 27.4 2.8 2
    102.0 2.9
    220.0 2.2

    输出样例#1:

    26.95

    思路

    寻找当前油量能到达的最便宜的加油站,如果找到了,那就开过去加油。如果找不到, 那就寻找最近的比本站便宜的站点,找到的话就加油刚好开过去,找不到的话就寻找次优站点,充满油开过去,如果找不到任何站点,那就输出No Solution

    #include<cstdio>  
    #include<cmath>  
    #include<algorithm>  
    #define precision 0.0001  
    #define maxn 1000  
    using namespace std;  
    struct tnode{double d,p;}a[maxn+10];  
    double d1,c,d2,p;  
    int n;  
    bool cmp(tnode xx,tnode yy)  
    {  
      return xx.d<yy.d;  
    }  
    int main()  
    {  
      int i,j,k;  double s,ans,x,y;  
      scanf("%lf%lf%lf%lf%d",&d1,&c,&d2,&p,&n);  
      a[1].d=0,a[1].p=p;  
      a[2].d=d1,a[2].p=0;  
      for(n+=2,i=3;i<=n;i++)scanf("%lf%lf",&a[i].d,&a[i].p);  
      sort(a+1,a+n+1,cmp);  
      k=1,ans=x=0,s=c*d2;  
      while(k<=n)  
        {   
          if(a[k+1].d-a[k].d>s){printf("No Solution
    ");return 0;}  
          for(j=k+1;a[j].d-a[k].d<=s && j<=n;j++)  
            if(a[j].p<=a[k].p)  
              {  
                y=(a[j].d-a[k].d)/d2;  
                if(x<y)ans+=a[k].p*(y-x),x=0;  
                else x-=y;  
                k=j;  
                break;  
              }  
            if(fabs(a[k].d-d1)<=precision)  
              {  
                printf("%.2lf
    ",ans);  
                return 0;  
              }  
            if(j!=k)  
              {  
                ans+=a[k].p*(c-x);  
                x=c-(a[k+1].d-a[k].d)/d2;  
                k++;  
              }    
        }    
      return 0;  
    }  
  • 相关阅读:
    babel的使用以及安装配置
    常见的浏览器兼容性问题与解决方案——CSS篇
    ES6入门——变量的解构赋值
    ES6入门——let和const命令
    第一个移动端项目
    向Github提交更改的代码
    MySQL安装配置
    HTTP 状态消息
    HTMl基础
    Shell 常用的命令
  • 原文地址:https://www.cnblogs.com/thmyl/p/6193052.html
Copyright © 2011-2022 走看看