【codevs 1349】(板豚の)列車切符解題報告

1979 ワード

板豚の汽車の切符codevs 1349黄金Gold
テーマ説明Description
奸商zn(番号に合わせて席に着かないでください)は汽車会社を設立して、弱い板豚は彼女の友达の板豚を見舞いに行きます.万悪のznは板豚にいろいろな値上げを実施して、板豚は寒くありません.
線路上にはn(2<=n<=10000)の駅があり、各駅からその線路の先発駅までの距離は既知である.任意の2つの駅の間の切符の価格は以下の表の通りです.
駅間の距離-X運賃
0       C1
L1          C2
L2          C3
ここで、L 1、L 2、L 3、C 1、C 2、C 3はいずれも既知の正の整数であり、(1<=L 1である.明らかに2つの駅の間の距離がL 3より大きい場合、1つの駅から別の駅まで少なくとも2枚の切符を買わなければならない.注意:各切符は使用時に1つの駅から別の駅までしか終わらない.
今、板豚はAからBまで、奸商znに鉄棒を叩かれないように、板豚を助けることができますか?
入力記述Input Description
入力ファイルの第1行6個の整数、L 1、L 2、L 3、C 1、C 2、C 3(1<=L 1これらの整数はスペースで区切る.第2行駅の数N(2<=N<=10000)である.3番目の動作は、スペースで区切られた2つの異なる整数A、Bである.次のN-1行は、第1局から他局までの距離を含む.これらの距離は、成長の順序で異なる正の整数に設定されます.隣接する2局間の距離はL 3を超えない.2つの所定の駅間の行程にかかる最小値は10^9を超えず、任意の2駅間の距離は10^9を超えない.
出力記述Output Description
出力ファイルには、AからBまでの最小値を示す数字が1つしかない.
サンプル入力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
#include
#include
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]+c1l1&&a[i]-a[j]<=l2)
	  	  if (f[j]+c2l2&&a[i]-a[j]<=l3)
	  	  if (f[j]+c3