HDU 1260 Tickets 簡單DP

傳送門: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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章