【简单DP】HDU 1260 Tickets

【第二次排位_Attempted】
HDU 1260 Tickets

  • 题意:有K张单人票,有各自的出票时间,有K-1张双人票,有各自的出票时间。这个双人票是第(1,2)(2,3)(3,4)……这样的组成两个人的出票时间。问最少多长时间卖掉所有的票。DP方程列出来做就是了。
  • My_Feeling:比赛的时候还有不到半个小时做这道题,一直没有读懂题。太诡异了这个题意。按照正常生活中电影票出,肯定是一张一张的出撒,所以我还记录了双人票在当前状态下用了多少张。鬼知道它是这样直接上张不用直接不要了,要下张。而且,当时的时候也没有想到用DP来做,反正就是题意也没想对,方法也没相对叭。后来比赛完补题,我发现还是过不了,后来问了学长才知道是我题意理解错了。tcl
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define P(x) x>0?x:0
#define INF 0x3f3f3f3f

using namespace std;
typedef long long ll;
typedef vector<int>:: iterator VITer;
const int maxn=2e3+5;

int k;
int t;
int N;
int s[maxn],d[maxn];
int dp[maxn];//到第m个人的时候的最少时间

int main()
{
    scanf("%d",&N);
    while(N--)
    {
        scanf("%d",&k);
        t=0;
        for(int i=1;i<=k;i++)
            scanf("%d",&s[i]);
        for(int i=2;i<=k;i++)
            scanf("%d",&d[i]);
        fill(dp,dp+k+1,0);
        dp[1]=s[1];
        for(int i=2;i<=k;i++)
            dp[i]=min(dp[i-1]+s[i],dp[i-2]+d[i]);
        t=dp[k];
        int h=t/3600;
        t-=h*3600;
        int m=t/60;
        t-=m*60;
        h+=8;
        if(h<=12)
            printf("%.2d:%.2d:%.2d am\n",h,m,t);
        else
        {
            h-=12;
            printf("%.2d:%.2d:%.2d pm\n",h,m,t);
        }
    }
    return 0;
}

你可能感兴趣的:(#,基本DP,动态规划)