HDU 1260

来源:互联网 发布:mysql 查看表空间大小 编辑:程序博客网 时间:2024/06/05 10:07

题目大意:有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;}