[BZOJ1511]火车票
来源:互联网 发布:unity3d 向目标移动 编辑:程序博客网 时间:2024/04/30 15:33
一个铁路线上有n(2<=n<=10000)个火车站,每个火车站到该线路的首发火车站距离都是已知的。任意两站之间的票价如下表所示:站之间的距离 X与票价的关系: 如果距离 :0 < X < =L1 则票价为C1 如果距离 :L1 < X < =L2 则票价为C2 如果距离 :L2 < X < =L3 则票价为C3 其中L1,L2,L3,C1,C2,C3都是已知的正整数,且(1 <= L1 < L2 < L3 <= 10^9, 1 <= C1 < C2 < C3 <= 10^9)。显然若两站之间的距离大于L3,那么从一站到另一站至少要买两张票。注意:每一张票在使用时只能从一站开始到另一站结束。 现在需要你对于给定的线路,求出从该线路上的站A到站B的最少票价。你能做到吗?
输入
输入文件的第一行为6个整数, L1, L2, L3, C1, C2, C3 (1 <= L1 < L2 < L3 <= 10^9, 1 <= C1 < C2 < C3 <= 10^9) ,这些整数由空格隔开.第二行为火车站的数量N (2 <= N <= 10000).第三行为两个不同的整数A、B,由空格隔开。接下来的 N-1 行包含从第一站到其他站之间的距离.这些距离按照增长的顺序被设置为不同的正整数。相邻两站之间的距离不超过L3. 两个给定火车站之间行程花费的最小值不超过10^9,而且任意两站之间距离不超过 10^9。
输出
输出文件中只有一个数字,表示从A到B要花费的最小值.
输入样例:
3 6 8 20 30 40
7
2 6
3
7
8
13
1523
输出样例:
70
题解:dp[i]=dp[j]+cost(i,j)
#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>#include<cmath>#include<algorithm>using namespace std;const int N=10010;int L1, L2, L3, C1, C2, C3;int n, A, B, dp[N], L[N];int main() {scanf( "%d%d%d", &L1, &L2, &L3 );scanf( "%d%d%d", &C1, &C2, &C3 );scanf( "%d%d%d", &n, &A, &B );for( int i=2; i<=n; i++ ) scanf( "%d", &L[i] );memset( dp, 0x7f, sizeof dp ); dp[A]=0;//注意要清成0x7f7f7f7f7,0x3f3f3f3f要wafor(int i=A; i<=B; i++ ) {for(int j=i-1; j>=A && L[i]-L[j]<=L3; j-- ) {int dis=L[i]-L[j];if( dis<=L1 ) dp[i]=min( dp[i], dp[j]+C1 );else if( dis<=L2 ) dp[i]=min( dp[i], dp[j]+C2 );else if( dis<=L3 ) dp[i]=min( dp[i], dp[j]+C3 );}}printf( "%d\n", dp[B] );return 0;}
阅读全文
0 0
- [BZOJ1511]火车票
- 火车票
- 火车票
- 火车票
- 火车票
- 火车票
- 火车票
- 火车票
- 火车票
- 火车票
- 火车票
- 火车票
- BZOJ1511 [POI2006]OKR-Periods of Words
- bzoj1511: [POI2006]OKR-Periods of Words
- [BZOJ1511][POI2006]OKR-Periods of Words(kmp+dp)
- 没买到火车票
- 火车票网站
- 春运火车票
- Android中白天模式与夜间模式的切换
- 树莓派3b——linux内核更新
- 南师附中集训总结Day3
- uva 424 Java大数
- VS2008中openGL开发环境配置(目前最全版)
- [BZOJ1511]火车票
- 高效Java实现敏感词过滤算法工具包
- JQuery教程详解之五AJAX与noConflict()
- c++中虚析构函数的作用
- 一些自己写网页时遇到的问题及细节处理
- 面试题-----线程
- 第三方支付遇到的问题
- 持续集成:docker下使用jenkins容器构建docker镜像
- POJ 1080 Human Gene Functions(最长公共子序列的特别版)