HDU 1260 Tickets

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

分析:先算一下数据范围最多50000s,所以不超过当天晚上12点;

dp相当水,从前往后决策

dp[i] = min(dp[i - 1] + s[i], dp[i  - 2] + d[i])

 1 #include<iostream>
 2 #include<sstream>
 3 #include<cstdio>
 4 #include<cstdlib>
 5 #include<string>
 6 #include<cstring>
 7 #include<algorithm>
 8 #include<functional>
 9 #include<iomanip>
10 #include<numeric>
11 #include<cmath>
12 #include<queue>
13 #include<vector>
14 #include<set>
15 #include<cctype>
16 #define PI acos(-1.0)
17 const int INF = 0x3f3f3f3f;
18 const int NINF = -INF - 1;
19 const int maxn = 2e3 + 5;
20 typedef long long ll;
21 using namespace std;
22 int s[maxn], d[maxn];
23 int dp[maxn];
24 int main()
25 {
26     int n;
27     scanf("%d", &n);
28     while (n--)
29     {
30         int k;
31         scanf("%d", &k);
32         for (int i = 0; i <= k; ++i)
33             s[i] = INF, d[i] = INF, dp[i] = 0;
34         for (int i = 1; i <= k; ++i)
35             scanf("%d", &s[i]);
36         for (int i = 2; i <= k; ++i)
37             scanf("%d", &d[i]);
38         dp[1] = s[1];
39         for (int i = 2; i <= k; ++i)
40         {
41             dp[i] = min(dp[i - 1] + s[i], dp[i - 2] + d[i]);
42             //cout << i << ' ' << dp[i] << endl;
43         }
44         int h, m, s;
45         h = 8 + dp[k] / 3600;
46         m = (dp[k] % 3600) / 60;
47         s = (dp[k] % 3600) % 60;
48         printf("%02d:%02d:%02d ", h, m, s);
49         if (h >= 12) printf("pm\n");
50         else printf("am\n");
51     }
52     return 0;
53 }

 

上一篇:Java多线程详解


下一篇:校招笔试题集锦(持续更新)