傳送門:HDU 1260 Tickets
分析:
一道簡單的DP題,代碼思路簡單清晰。注意時間轉化。不然WA。
代碼如下;
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define ms(x, y) memset(x, y, sizeof(x))
const double PI = acos(-1.0), eps = 1e-8;
int main() {
int N,K[2002],kk[2002],dp[2002],n; // dp[i] 前i個人花的最短的時間
scanf("%d",&N);
while(N--) {
scanf("%d",&n);
ms(dp, 0);
for(int i=1; i<=n; i++)
scanf("%d",K+i);
dp[1] = K[1];
for(int i=2; i<=n; i++)
scanf("%d",kk+i);
for(int i=2; i<=n; i++)
dp[i] = min(dp[i-1] + K[i], dp[i-2] + kk[i]); // (兩種抉擇),對於第i個人,是單獨繳費還是選擇和前一個人一起繳費
// 轉化成時間
int h = dp[n] / 3600;
int m = (dp[n] % 3600) / 60;
// int s = dp[n] - h*3600 - m*60;
int s = dp[n] % 60;
printf("%02d:%02d:%02d %s\n",(8+h)%24,m,s,(8+h)%24<12?"am":"pm");
}
return 0;
}