您的位置:首页 > 其它

HDU 1260 - Tickets

2017-09-06 15:28 316 查看
题目大意:有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);
else
printf("%02d:%02d:%02d am\n", hour, minu, sec);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: