HDU1260 Tickets

2017年8月11日

有 n 个人要买票,有两种售票方案:第一种方案,第 i 个人单独买票,要花费 a[i] 的时间.第二种方案,第 i 个人和前一个人一起买票,花费 b[i] 的时间,至少花费多少时间才能让这 n 个人买到票.

dp[i]为到第i位所花费的最少时间,那么就有 dp[i] = min(dp[i - 1] + a[i], dp[i - 2] + b[i]),就是说,到第i位最少花费的时间,等于单独为自己买票的时间与跟前一个人买票的时间的最小值.

#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int N = 2005;
int a[N], b[N];
int dp[N];
int main()
{
    int t;
    scanf("%d", &t);
    while (t--) {
        int n;
        scanf("%d", &n);
        for (int i = 1; i <= n; i++) {
            scanf("%d", a + i);
        }
        for (int i = 2; i <= n; i++) {
            scanf("%d", b + i);
        }
        dp[0] = 0;
        dp[1] = a[1];
        for (int i = 2; i <= n; i++) {
            dp[i] = min(dp[i - 1] + a[i], dp[i - 2] + b[i]);
        }
        int mi = dp[n] / 60;
        int h = mi / 60 + 8;
        int s = dp[n] % 60;
        mi %= 60;
        if (h > 12) {
            printf("%02d:%02d:%d pm\n", h - 12, mi, s);
        } else {
            printf("%02d:%02d:%02d am\n", h, mi, s);
        }
    }
    return 0;
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注