hdoj1260 Tickets (简单DP)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1260

思路:

很简单的DP题,状态方程也比较容易想到,用f[i]表示到第i个人所耗的最短时间,详见代码。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int n,k,s[2005],d[2005],f[2005];
 5 
 6 int main(){
 7     scanf("%d",&n);
 8     while(n--){
 9         memset(f,0,sizeof(f));
10         scanf("%d",&k);
11         for(int i=0;i<k;i++)
12             scanf("%d",&s[i]);
13         for(int i=0;i<k-1;i++)
14             scanf("%d",&d[i]);
15         f[0]=s[0];f[1]=min(f[0]+s[1],d[0]);
16         for(int i=2;i<k;i++)
17             f[i]=min(f[i-1]+s[i],f[i-2]+d[i-1]);
18         int hh=8,mm=0,ss=0;
19         hh+=f[k-1]/3600;
20         f[k-1]%=3600;
21         mm+=f[k-1]/60;
22         f[k-1]%=60;
23         ss+=f[k-1];
24         if(hh<10) printf("0");
25         printf("%d:",hh);
26         if(mm<10) printf("0");
27         printf("%d:",mm);
28         if(ss<10) printf("0");
29         printf("%d ",ss);
30         if(hh<=12) printf("am\n");
31         else printf("pm\n");
32     }
33     return 0;
34 }

猜你喜欢

转载自www.cnblogs.com/FrankChen831X/p/10399986.html