hdu 1494 跑跑卡丁车

http://acm.hdu.edu.cn/showproblem.php?pid=1494

dp[i][j]为第i段路,储存了j个能量。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define ll int
 5 using namespace std;
 6 const int inf=1<<30;
 7 
 8 ll a[20000],b[20000];
 9 ll dp[10010][20];
10 int l,n;
11 
12 int main()
13 {
14     while(scanf("%d%d",&l,&n)!=EOF)
15     {
16         for(int i=1; i<=l; i++)
17         {
18             scanf("%d",&a[i]);
19         }
20         for(int i=1; i<=l; i++)
21         {
22             scanf("%d",&b[i]);
23         }
24         for(int i=l+1; i<=n*l; i++)
25         {
26             a[i]=a[i-l];
27             b[i]=b[i-l];
28         }
29         for(int i=1; i<15; i++)
30         {
31             dp[0][i]=inf;
32         }
33         dp[0][0]=0;
34         for(int i=1; i<=n*l; i++)
35         {
36             for(int j=0; j<15; j++)
37             {
38                 if(j==0) dp[i][j]=dp[i-1][5]+b[i];
39                 else
40                 {
41                     dp[i][j]=dp[i-1][j-1]+a[i];
42                     if(j==10)
43                         dp[i][j]=min(dp[i][j],dp[i-1][14]+a[i]);
44                     if(j+5<15)
45                         dp[i][j]=min(dp[i][j],dp[i-1][j+5]+b[i]);
46                 }
47             }
48         }
49         ll ans=dp[l*n][0];
50         for(int i=1; i<15; i++)
51         {
52             ans=min(ans,dp[n*l][i]);
53         }
54         printf("%d\n",ans);
55     }
56     return 0;
57 }
View Code
posted @ 2014-07-24 10:48  null1019  阅读(117)  评论(0编辑  收藏  举报