0
点赞
收藏
分享

微信扫一扫

HDU - 1260 Tickets(DP)


题目大意:有一个人在卖电影票,给出单卖给每个人的时间,和卖给两个连续的人的时间,问卖完所有电影票需要花费的最小时间

解题思路:用dp[i]表示卖了i张电影票所要花费的最小时间,得转移方程
dp[i] = min(dp[i - 1] + single[i], dp[i - 2] + double[i])

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 2010;

int one[N], two[N], dp[N];
int n;

void init() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
        scanf("%d", &one[i]);

    for (int i = 1; i <= n - 1; i++)
        scanf("%d", &two[i]);
}

void solve() {
    memset(dp, 0, sizeof(dp));
    dp[0] = 0;
    dp[1] = one[1];
    for (int i = 2; i <= n; i++)
        dp[i] = min(dp[i - 1] + one[i], dp[i - 2] + two[i - 1]);

    int h = dp[n] / 3600 + 8;
    dp[n] %= 3600;
    int m = dp[n] / 60;
    dp[n] %= 60;

    if (h >= 12) printf("%02d:%02d:%02d pm\n", h - 12, m, dp[n]);
    else printf("%02d:%02d:%02d am\n", h, m, dp[n]);
}

int main() {
    int test;
    scanf("%d", &test);
    while (test--) {
        init();
        solve();
    }
    return 0;
}


举报

相关推荐

0 条评论