您的位置:首页 > 其它

HDU 1260 Tickets

2016-04-08 16:49 246 查看
给你k个人,每个人单独买票的时间以及两个人合并买票的时间,问最少卖光票需要多久时间。dp[i]表示前i个人买好票最少需要花费的时间,状态转移方程:dp[i] = dp[i] = min(dp[i - 1] + arr1[i], dp[i - 2] + arr2[i - 1]);其中arr1[i]表示第i个人单独买票的时间,arr2[i]表示i+1这个人和i这个人合并买票的时间。

#include <cstdio>
#include <iostream>
#include <cstring>

using namespace std;
const int MAX = 2e3 + 5;
int arr1[MAX], arr2[MAX], dp[MAX];

int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int n;
scanf("%d", &n);
memset(arr1, 0, sizeof(arr1));
memset(arr2, 0, sizeof(arr2));
for (int i = 1; i <= n; ++i)
scanf("%d", &arr1[i]);
for (int i = 1; i <= n - 1; ++i)
scanf("%d", &arr2[i]);
dp[1] = arr1[1];
for (int i = 2; i <= n; ++i)
{
dp[i] = min(dp[i - 1] + arr1[i], dp[i - 2] + arr2[i - 1]);
}
int second = dp
% 60;
int minute = dp
% 3600 / 60;
int hour = (8 + dp
/ 3600);
if (hour < 12)
printf("%02d:%02d:%02d am\n", hour, minute, second);
else
printf("%02d:%02d:%02d pm\n", hour, minute, second);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: