【codevs1349】 (板猪的)火车票 解题报告
2015-08-24 11:01
351 查看
板猪的火车票 codevs1349黄金Gold
题目描述 Description
奸商zn(请勿对号入座)开办了一家火车公司,弱弱的板猪要去看望她的朋友小板猪,万恶的zn对板猪实施各种提高价,板猪不寒而栗。。。
铁路线上有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,为了不让奸商zn敲竹杠,你能帮助板猪吗?
输入描述 Input Description
输入文件的第一行为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。
输出描述 Output Description
输出文件中只有一个数字,表示从A到B要花费的最小值.
样例输入 Sample Input
3 6 8 20 30 40
7
2 6
3
7
8
13
15
23
样例输出 Sample Output
70
【解题思路】
其实这就是一个水水的动归,,不过刚开始我困住了。。后来才知道原来动归还可以这么写。。。
f[i]表示从起点到i的最少花费,所以目标值是f[t];
就是一个最简单的动归,,,我只不过是被迷惑了双眼。。。不过我动归的渣渣我承认。。。
【代码】
题目描述 Description
奸商zn(请勿对号入座)开办了一家火车公司,弱弱的板猪要去看望她的朋友小板猪,万恶的zn对板猪实施各种提高价,板猪不寒而栗。。。
铁路线上有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,为了不让奸商zn敲竹杠,你能帮助板猪吗?
输入描述 Input Description
输入文件的第一行为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。
输出描述 Output Description
输出文件中只有一个数字,表示从A到B要花费的最小值.
样例输入 Sample Input
3 6 8 20 30 40
7
2 6
3
7
8
13
15
23
样例输出 Sample Output
70
【解题思路】
其实这就是一个水水的动归,,不过刚开始我困住了。。后来才知道原来动归还可以这么写。。。
f[i]表示从起点到i的最少花费,所以目标值是f[t];
就是一个最简单的动归,,,我只不过是被迷惑了双眼。。。不过我动归的渣渣我承认。。。
【代码】
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int l1,l2,l3,c1,c2,c3,n,s,t,c,i,j; int a[5005]; long long f[5005]; int main() { scanf("%d%d%d%d%d%d",&l1,&l2,&l3,&c1,&c2,&c3); scanf("%d",&n); scanf("%d%d",&s,&t); if (s>t) { c=s; s=t; t=c; } if (s==t) { printf("0"); return 0; } a[1]=0; for (i=2;i<=n;++i) scanf("%d",&a[i]); memset(f,127,sizeof(f)); f[s]=0; for (i=s+1; i<=t; ++i) for (j=s; j<=t-1; ++j) { if (a[i]-a[j]<=l1) if (f[j]+c1<f[i]) f[i]=f[j]+c1; if (a[i]-a[j]>l1&&a[i]-a[j]<=l2) if (f[j]+c2<f[i]) f[i]=f[j]+c2; if (a[i]-a[j]>l2&&a[i]-a[j]<=l3) if (f[j]+c3<f[i]) f[i]=f[j]+c3; } cout<<f[t]; return 0; }
相关文章推荐
- Math.round()什么作用?
- Java中Integer与int类型的比较--装箱和拆箱
- BloomFilter——大规模数据处理利器
- 黑马程序员_java基础之多线程
- Andrew Ng's Machine Learning in Coursera(I)
- socket、fsockopen、curl、stream 区别
- 内存溢出servlet
- Linux下的软件安装
- textview的一些设置 删除线 省略号 下划线 字体变化等
- 微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)
- HDU 1038.Biker's Trip Odometer【单位换算】【水水水】【8月24】
- php抓取页面的几种方式
- Cocos2d-x_创建多个滚动层(每层速度不同)
- nc推单---弹出新单据框
- vc++6.0 字节运算
- PHP的单引号和双引号
- hdu--5137
- Check the difficulty of problems POJ 2151
- POJ 3321 Apple Tree 树状数组
- const介绍