【codevs1349】 (板猪的)火车票 解题报告

解决板猪在奸商zn的高价火车票下如何从A到B的问题,通过动态规划找到两站间票价的最优解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

板猪的火车票  codevs1349黄金Gold

题目描述 Description

奸商zn(请勿对号入座)开办了一家火车公司,弱弱的板猪要去看望她的朋友小板猪,万恶的zn对板猪实施各种提高价,板猪不寒而栗。。。

铁路线上有n(2<=n<=10000)个火车站,每个火车站到该线路的首发火车站距离都是已知的。任意两站之间的票价如下表所示:

站之间的距离 - X      票价

0<X<=L1       C1

L1<X<=L2          C2

L2<X<=L3          C3

其中L1L2L3C1C2C3都是已知的正整数,且(1 <= L1 < L2 < L3 <= 10^9, 1 <= C1 < C2 < C3 <= 10^9)。显然若两站之间的距离大于L3,那么从一站到另一站至少要买两张票。注意:每一张票在使用时只能从一站开始到另一站结束。

现在板猪要从AB,为了不让奸商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).第三行为两个不同的整数AB,由空格隔开。接下来的 N-1 行包含从第一站到其他站之间的距离.这些距离按照增长的顺序被设置为不同的正整数。相邻两站之间的距离不超过L3. 两个给定火车站之间行程花费的最小值不超过10^9,而且任意两站之间距离不超过 10^9

输出描述 Output Description

   输出文件中只有一个数字,表示从AB要花费的最小值.

样例输入 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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值