hdu 1260 Tickets

题意:给出每个人单独买票时间和每个人和前面那个人一起买票的时间,求最小时间

思路:因为只与时间有关,与时间有关的只有人,所以dp状态的定义很容易,但在推dp 方程的时候出了一点小问题,还是么读清楚题目

代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn=2007;
int dp[maxn],a[maxn],b[maxn];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--){
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        for(int i=2;i<=n;i++){
            scanf("%d",&b[i]);
        }
        memset(dp,0x3f,sizeof(dp));
        dp[0]=0;
        dp[1]=a[1];
        for(int i=2;i<=n;i++){
            dp[i]=min(dp[i-1]+a[i],dp[i-2]+b[i]);
        }
        int hh = dp[n]/3600;
        int mm = dp[n]%3600/60;
        int ss = dp[n]%60;
        printf("%02d:%02d:%02d%s\n", (8+hh)%24, mm, ss, (hh+8)%24>12?" pm":" am");
    }
    return 0;
}

 

posted @ 2018-02-01 16:12  啦啦啦天啦噜  阅读(83)  评论(0编辑  收藏  举报