码迷,mamicode.com
首页 > 其他好文 > 详细

递推DP URAL 1031 Railway Tickets

时间:2015-05-13 21:12:36      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

 

题目传送门

 1 /*
 2     简单递推DP:读题烦!在区间内的都更新一遍,dp[]初始化INF
 3     注意:s1与s2大小不一定,坑!
 4     详细解释:http://blog.csdn.net/kk303/article/details/6847948
 5 */
 6 #include <cstdio>
 7 #include <iostream>
 8 #include <algorithm>
 9 #include <cstring>
10 #include <string>
11 #include <queue>
12 using namespace std;
13 
14 const int MAXN = 1e4 + 10;
15 const int INF = 0x3f3f3f3f;
16 int C[4], L[4];
17 int dp[MAXN], a[MAXN];
18 
19 int main(void)        //URAL 1031 Railway Tickets
20 {
21     //freopen ("Y.in", "r", stdin);
22 
23     while (scanf ("%d%d%d%d%d%d", &L[1], &L[2], &L[3], &C[1], &C[2], &C[3]) == 6)
24     {
25         int n;    scanf ("%d", &n);
26         int s1, s2;
27         scanf ("%d%d", &s1, &s2);
28         if (s1 > s2)    swap (s1, s2);
29         a[1] = 0;
30         for (int i=2; i<=n; ++i)
31         {
32             scanf ("%d", &a[i]);    dp[i] = INF;
33         }
34 
35         dp[s1] = 0;
36         for (int i=s1+1; i<=s2; ++i)
37         {
38             for (int j=1; j<=3; ++j)
39             {
40                 int k = i - 1;
41                 while (k >= s1)
42                 {
43                     if (a[i] - a[k] > L[j])    break;
44                     if (dp[i] > dp[k] + C[j])    dp[i] = dp[k] + C[j];
45                     k--;
46                 }
47             }
48         }
49 
50         printf ("%d\n", dp[s2]);
51     }
52 
53     return 0;
54 }

 

递推DP URAL 1031 Railway Tickets

标签:

原文地址:http://www.cnblogs.com/Running-Time/p/4501331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!