Hdu 1260 【DP】.cpp

  题意:

  知道一个人买票花的时间和和前面那个人一起买票花的时间,问最少花多少时间可以把票卖完..

  输入:

    给出T,表示有T组样例

    给出n,表示有n个人买票..

    给出n个数表示这个人单独买票会花的时间..

    给出n-1个数,表示这个人和前面那个人一起买票会花的时间..

    

思路:

  状态转移方程是:dp[i] = min(dp[i-1]+单独买花的时间, dp[i-2]+和前面那个人一起买花的时间)

  初始状态是dp[1] = 第一个人单独买话的时间

  

Tips:

  nothing..??!

Code:

 1 #include <stdio.h>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 const int MAXN = 2010;
 7 
 8 int main()
 9 {
10     int T, n;
11     int d[MAXN], s[MAXN], dp[MAXN] = {0};
12     int hh, mm, ss;
13     scanf("%d", &T);
14     while (T--) {
15         scanf("%d", &n);
16         for (int i = 1; i <= n; ++i)
17             scanf("%d", &s[i]);
18         for (int i = 2; i <= n; ++i)
19             scanf("%d", &d[i]);
20         dp[1] = s[1];
21         for (int i = 2; i <= n; ++i)
22             dp[i] = min(dp[i-1]+s[i], dp[i-2]+d[i]);
23         hh = dp[n]/3600;
24         mm = dp[n]%3600/60;
25         ss = dp[n]%60;
26         printf("%02d:%02d:%02d%s\n", (8+hh)%24, mm, ss, (hh+8)%24>12?" pm":" am");
27     }
28     return 0;
29 }
View Code


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

原文地址:https://www.cnblogs.com/Griselda/p/3118892.html