zoukankan      html  css  js  c++  java
  • Tickets---hdu1260(简单dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1260

    题意是有n个人排队买票,第 i 个人买票所需要的时间是a[i],这个人和 i-1 或者 i+1 合买的时间是b[i];

    当然每个人都要等到前面所有的人都买完了才能买,我们求所需总时间至少是多少,工作人员早上8点上班,问几点才能下班;

    dp[i] 表示前i个人所发费的最小总时间,那么第i个人有两种选择自己买或者和前面的一起买(和后面一起买可以看成后面的人和他前面的人一起买)所以

    dp[i] = min(dp[i-1] + a[i], dp[i-2]+b[i]);

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<algorithm>
    using namespace std;
    #define N 2100
    #define INF 0xffffff
    
    int main()
    {
        int T, n, a[N], b[N], dp[N];
        scanf("%d", &T);
        while(T--)
        {
            scanf("%d", &n);
    
            memset(dp, 0, sizeof(dp));
            for(int i=0;i<=n+1; i++)
                a[i]=b[i]=INF;
    
            for(int i=2; i<=n+1; i++)
                scanf("%d", &a[i]);
            for(int i=3; i<=n+1; i++)
                scanf("%d", &b[i]);
    
            for(int i=2; i<=n+1; i++)
                dp[i]=min(dp[i-1]+a[i], dp[i-2]+b[i]);
    
            n=n+1;
            int s=dp[n]%60;
            int m=dp[n]/60%60;
            int h=8+dp[n]/3600;
    
            if(h>12)
                printf("%02d:%02d:%02d pm
    ", h-12, m, s);
            else
                printf("%02d:%02d:%02d am
    ", h, m, s);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    【KMP】Period
    【KMP】Cyclic Nacklace
    【KMP】Oulipo
    【KMP】Number Sequence
    二分
    Stock 贪心经典 Zoj2921
    D. Block Tower
    烦人的dp
    搜索
    hdu 一个人的旅行
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/4920533.html
Copyright © 2011-2022 走看看