• 题目1086:最小花费


    题目描述:
    在某条线路上有N个火车站,有三种距离的路程,L1,L2,L3,对应的价格为C1,C2,C3.其对应关系如下:
    距离s           票价
    0<S<=L1         C1
    L1<S<=L2        C2
    L2<S<=L3        C3
    输入保证0<L1<L2<L3<10^9,0<C1<C2<C3<10^9。
    每两个站之间的距离不超过L3。
    当乘客要移动的两个站的距离大于L3的时候,可以选择从中间一个站下车,然后买票再上车,所以乘客整个过程中至少会买两张票。
    现在给你一个 L1,L2,L3,C1,C2,C3。然后是A B的值,其分别为乘客旅程的起始站和终点站。
    然后输入N,N为该线路上的总的火车站数目,然后输入N-1个整数,分别代表从该线路上的第一个站,到第2个站,第3个站,……,第N个站的距离。
    根据输入,输出乘客从A到B站的最小花费。

     

    输入:
    以如下格式输入数据:
    L1  L2  L3  C1  C2  C3
    A  B
    N
    a[2]
    a[3]
    ……
    a[N]

     

    输出:
    可能有多组测试数据,对于每一组数据,
    根据输入,输出乘客从A到B站的最小花费。

     

    样例输入:
    1 2 3 1 2 3
    1 2
    2
    2
    样例输出:
    2
     1 #include <iostream>// 1086
     2  
     3 using namespace std;
     4  
     5 const int N = 2000;
     6  
     7 int main(void)
     8 {
     9     long long l1;
    10     long long l2;
    11     long long l3;
    12     long long c1;
    13     long long c2;
    14     long long c3;
    15  
    16     long long a;
    17     long long b;
    18  
    19     long long dist[N] = {0};
    20     long long n;
    21     long long i;
    22     long long j;
    23  
    24     long long price[N] ;
    25      
    26  
    27     while (cin >> l1 >> l2 >> l3 >> c1 >> c2 >> c3)
    28     {
    29         cin >> a >> b;
    30         cin >> n;
    31  
    32         for(i = 2; i <= n; ++i)
    33             cin >>dist[i];
    34          
    35         dist[1] = 0;
    36         for(i = 1; i < n; ++i)  
    37             dist[i] = dist[i+1] - dist[i];
    38  
    39         price[a] = 0;
    40  
    41         for(i = a+1; i <= b; ++i)
    42         {
    43              
    44             long long s = 0;
    45             long long t ;
    46             long long mi = price[i-1] + c3;
    47  
    48             for(j = i-1 ; j >= a; --j)
    49             {
    50                 s += dist[j];
    51  
    52                 if(s <= l1)
    53                     t = price[j] + c1;
    54  
    55                 if(s <= l2 && s > l1)
    56                     t = price[j] + c2;
    57  
    58                 if(s <= l3 && s > l2)
    59                     t = price[j] + c3;
    60                  
    61                 if(mi > t)
    62                     mi = t;
    63             }
    64             price[i] = mi; 
    65         }
    66          
    67         cout<<price[b]<<endl;
    68  
    69  
    70     }
    71     return 0;
    72 }
    73  
  • 相关阅读:
    ICEY修改实现ICEY锁血,修改data文件实现主之名关卡重现,顺便改金币
    gg修改器修改聚爆
    MOUSE_OVER 与 ROLL_OVER
    Tween 没有完毕 就停止
    如何将FLex AIR运行环境与AIR程序一起打包(转http://www.awsws.com/?p=94)
    做项目如做人
    flex 打开外部的swf 并调用其方法
    air 零散知识
    贝塞尔曲线的绘制
    air 读取sqlite的Date类型 解决方案
  • 原文地址:https://www.cnblogs.com/chchche/p/3466053.html
Copyright © 2020-2023  润新知