1. 程式人生 > 實用技巧 >【dp每日一題】HDU 1260 Tickets

【dp每日一題】HDU 1260 Tickets

HDU 1260 Tickets

大意:

給出n個人買票的時間以及他們每個人和下一個人合買雙人票的時間,問最早什麼時候能賣完票

思路:

\(dp[i]\)代表前i個人買完票需要多久,那麼可以從\(dp[i-2]\)轉移過來,也可以從\(dp[i-1]\)轉移過來

#include <bits/stdc++.h>

using namespace std;

const int N = 2e4 + 5;
typedef long long LL;
int t, n, a[N], b[N], dp[N];
int main() {
    cin >> t;
    while (t--) {
        cin >> n;
        for (int i = 0; i < n; i++) {
            cin >> a[i];
            dp[i] = 0x3f3f3f3f;
        }
        for (int i = 0; i < n - 1; i++) {
            cin >> b[i];
        }
        for (int i = 0; i < n; i++) {
            if (i == 0) dp[i] = a[0];
            else if (i == 1) dp[i] = min(a[0] + a[1], b[0]);
            else dp[i] = min(dp[i - 2] + b[i - 1], dp[i - 1] + a[i]);
        }
        int res = dp[n-1];
        int ss = res % 60;
        int mm = (res / 60) % 60;
        int hh = ((res / 60) / 60) % 60;
        if (hh + 8 > 12) printf("%02d:%02d:%02d pm\n", hh - 4, mm, ss);
        else printf("%02d:%02d:%02d am\n", hh + 8, mm, ss);
    }
    return 0;
}