题目描述:-
在某条线路上有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
转载于:https://www.cnblogs.com/chchche/p/3466053.html