一个铁路线上有 n 个火车站,每个火车站到该线路的首发火车站距离都是已知的。任意两站之间的票价如下表所示:
站之间的距离 –X | 票价 |
---|---|
0<X≤L1 | C1 |
L1<X≤L2 | C2 |
L2<X≤L3 | C3 |
L3<X | ∞ |
注意:每一张票在使用时只能从一站开始到另一站结束,不能在中途结束。
第一行为 6 个由空格隔开的整数 L1,L2,L3,C1,C2,C3 (1≤L1<L2<L3≤109,1≤C1<C2<C3≤109)。
第二行为火车站的数量 n (2≤n≤10000)。
第三行为两个不同的整数 A、B,由空格隔开。
接下来的 n−1 行包含从第一站到其他站之间的距离,保证这些距离按照增长的顺序被设置为不同的正整数。相邻两站之间的距离不超过 L3. 两个给定火车站之间行程花费的最小值不超过 109,而且任意两站之间距离不超过 109。
只有一个数字,表示从 A 到 B 要花费的最小值。
3 6 8 20 30 40
7
2 6
3
7
8
13
15
23
70
呱呱泡蛙只有 80pts 求助!!!
#include<iostream>
#define int long long
using namespace std;
int dp[10005] , n , l1 , l2 , l3 , c1 , c2 , c3 , A , B;
int len[10005];
signed main(){
cin >> l1 >> l2 >> l3 >> c1 >> c2 >> c3;
cin >> n >> A >> B;
for(int i=2;i<=n;i++){
cin >> len[i];dp[i] = 0x3f3f3f3f;
}
if(A>B)swap(A,B);
dp[A] = 0;
for(int i=A;i<B;i++){
for(int j=i+1;j<=B;j++){
int cnt = len[j] - len[i] , tmp;
if(cnt<=l1)tmp = c1;
else if(cnt<=l2)tmp = c2;
else if(cnt<=l3)tmp = c3;
if(cnt<=l3)dp[j] = min(dp[j],dp[i]+tmp);
}
}
cout << dp[B];
return 0;
}
求(你认为的)正解+思路,拿分 80 以上就关!求求了QAQ