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 }