hdoj 1260 Tickets 【简单DP】

Tickets

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 1916    Accepted Submission(s): 929

Problem Description

Jesus, what a great movie! Thousands of people are rushing to the cinema. However, this is really a tuff time for Joe who sells the film tickets. He is wandering when could he go back home as early as possible.

A good approach, reducing the total time of tickets selling, is let adjacent people buy tickets together. As the restriction of the Ticket Seller Machine, Joe can sell a single ticket or two adjacent tickets at a time.

Since you are the great JESUS, you know exactly how much time needed for every person to buy a single ticket or two tickets for him/her. Could you so kind to tell poor Joe at what time could he go back home as early as possible? If so, I guess Joe would full
of appreciation for your help.

Input

There are N(1<=N<=10) different scenarios, each scenario consists of 3 lines:

1) An integer K(1<=K<=2000) representing the total number of people;

2) K integer numbers(0s<=Si<=25s) representing the time consumed to buy a ticket for each person;

3) (K-1) integer numbers(0s<=Di<=50s) representing the time needed for two adjacent people to buy two tickets together.

Output

For every scenario, please tell Joe at what time could he go back home as early as possible. Every day Joe started his work at 08:00:00 am. The format of time is HH:MM:SS am|pm.

Sample Input

2
2
20 25
40
1
8

Sample Output

08:00:40 am
08:00:08 am

题意:有N个人排队买电影票,已知每个人买票需要的时间和两个人(连续的两人)一起买票需要的时间。问最少需要多少时间才能卖完所有票。

思路:用dp[ i ]表示前 i 个人买票需要的最短时间。man[ i ]表示第i个人单独买票需要的时间,two[ i ]表示第i-1和第i个人一起买票需要的时间。

则状态转移方程——dp[ i ] = min(dp[ i -1] + man[ i ], dp[ i - 2] + two[ i ] )。

AC代码:

#include <cstdio>
#include <cstring>
#include <queue>
#include <stack>
#include <vector>
#include <cmath>
#include <map>
#include <string>
#include <cstdlib>
#include <algorithm>
#define MAXN 2000+10
#define MAXM 60000+10
#define INF 1000000
#define eps 1e-8
#define LL long long
using namespace std;
int N;
int man[MAXN];
int two[MAXN];
int dp[MAXN];
int main()
{
    int t;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d", &N);
        for(int i = 1; i <= N; i++)
            scanf("%d", &man[i]);
        for(int i = 2; i <= N; i++)
            scanf("%d", &two[i]);
        memset(dp, 0, sizeof(dp));
        dp[1] = man[1];
        for(int i = 2; i <= N; i++)
            dp[i] = min(dp[i-1] + man[i], dp[i-2] + two[i]);
        int t = 28800 + dp[N];
        int hou = t / 3600;
        int mie = t % 3600 / 60;
        int sec = (t % 3600) % 60;
        if(t >= 43200)
        {
            if(hou > 12)
                hou -= 12;
            printf("%02d:%02d:%02d pm\n", hou, mie, sec);
        }
        else
            printf("%02d:%02d:%02d am\n", hou, mie, sec);
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-31 10:09:32

hdoj 1260 Tickets 【简单DP】的相关文章

hdoj 1260 Tickets【dp】

Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1935    Accepted Submission(s): 933 Problem Description Jesus, what a great movie! Thousands of people are rushing to the cinema. However,

hdoj 1260(简单dp)

Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7051    Accepted Submission(s): 3587 Problem Description Jesus, what a great movie! Thousands of people are rushing to the cinema. However

POJ 1260 Pearls 简单dp

1.POJ 1260 2.链接:http://poj.org/problem?id=1260 3.总结:不太懂dp,看了题解 http://www.cnblogs.com/lyy289065406/archive/2011/07/31/2122652.html 题意:珍珠,给出需求,单价,要求用最少的钱就可以买到相同数量的,相同(或更高)质量的珍珠. 把握题意,1.输入时,后输入的珍珠价格一定比前面输入的要贵.2.用高质量珍珠替代低质量. #include<iostream> #include

hdu 1260 Tickets 【dp】

Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1258    Accepted Submission(s): 599 Problem Description Jesus, what a great movie! Thousands of people are rushing to the cinema. However

【万能的搜索,用广搜来解决DP问题】ZZNU -2046 : 生化危机 / HDU 1260:Tickets

2046 : 生化危机 时间限制:1 Sec内存限制:128 MiB提交:19答案正确:8 题目描述 当致命的T病毒从Umbrella Corporation 逃出的时候,地球上大部分的人都死去了. 麻烦的是,他们并没有真正的死去. 爱丽诗在一个狭窄的巷子中,遇见了n个丧尸(编号1-n),巷子太窄了,爱丽诗只能按顺序解决它们. 爱丽诗擅长用匕首和弓箭,当爱丽诗面临编号为i的丧尸时,匕首每次只能解决一个丧尸用时为a[i],弓箭每次能且只能解决两个相邻的丧尸(丧尸i,和丧尸i+1),用时为b[i].

DP [HDU 1260] Tickets

Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1191    Accepted Submission(s): 559 Problem Description Jesus, what a great movie! Thousands of people are rushing to the cinema. However

HDU Tickets(简单的dp递推)

Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 972    Accepted Submission(s): 495 Problem Description Jesus, what a great movie! Thousands of people are rushing to the cinema. However,

HDU 1260:Tickets(DP)

Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 923    Accepted Submission(s): 467 Problem Description Jesus, what a great movie! Thousands of people are rushing to the cinema. However,

[2016-03-27][HDU][1260][Tickets]

时间:2016-03-27 22:37:37 星期日 题目编号:[2016-03-27][HDU][1260][Tickets] 遇到的问题:分钟数字,除以60以后还要模60 t / 60 % 60 #include <cstdio> #include <algorithm> using namespace std; typedef long long LL; const int maxk = 2000 + 10; int s[maxk],d[maxk]; int dp[maxk]