题目大意:有n个样例,每个样例中有m个人去买票,如果每个人买一张,时间分别为a1,a2,a3...an秒,如果是二个人一起买票,则从第二个人起与前一个人一起买票,时间为b1,b2 ... bn-1秒。问,n个人买票最少需要多久。
解题思路:dp公式,dp[i] = min(dp[i-1]+a[i], dp[i-1]+b[i])。dp[0]为一个人,是a1,dp[1]是两个人时,是min(a[0]+a[1], b[1])。为了方便b数组从b[1]开始输入。
ac代码:
#include <iostream>
#include <algorithm>
using namespace std;
int n, m, dp[2005], a[2005], b[2005];
int hour, minu, sec;
int main()
{scanf("%d", &n);while (n--){scanf("%d", &m);for (int i=0; i<m; i++)scanf("%d", &a[i]);for (int i=1; i<m; i++)scanf("%d", &b[i]);dp[0] = a[0];dp[1] = min(a[0] + a[1], b[1]);for (int i=2; i<m; i++)dp[i] = min(dp[i-1]+a[i], dp[i-2]+b[i]);hour = dp[m-1] / 3600 + 8;dp[m-1] = dp[m-1] % 3600;minu = dp[m-1] / 60;dp[m-1] = dp[m-1] % 60;sec = dp[m-1];if (hour >= 12)printf("%02d:%02d:%02d pm\n", hour, minu, sec);elseprintf("%02d:%02d:%02d am\n", hour, minu, sec);}
return 0;
}