【dp每日一題】HDU 1260 Tickets
阿新 • • 發佈:2020-12-25
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; }