博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1260:Tickets(DP)
阅读量:6265 次
发布时间:2019-06-22

本文共 2506 字,大约阅读时间需要 8 分钟。

Tickets

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

Total Submission(s): 7925    Accepted Submission(s): 4032

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

2220 254018

Sample Output

08:00:40 am08:00:08 am

题意

n个人排队买票,每次卖票可以卖给一个人,也可以卖给相邻的两个人,卖给一个人所花费的时间为a,卖给两个人花费的时间为b,求这些人全部买到票所需要的最少时间

思路

因为是求最少时间,保证每次状态是从第0个人转移来的,给dp[0]赋值为0,dp[1]的值为a[1]

状态转移方程:dp[i]=min(dp[i-1]+a[i],dp[i-2]+b[i-1])

AC代码

#include
#define ll long long#define ms(a) memset(a,0,sizeof(a))using namespace std;const int maxn=1e6+10;int a[maxn];int b[maxn];int dp[maxn];int main(){ int t; int n; scanf("%d",&t); while(t--) { ms(a); ms(b); ms(dp); scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); for (int i = 1; i < n; i++) scanf("%d", &b[i]); dp[0] = 0; dp[1] = a[1]; for (int i = 1; i <= n; i++) dp[i] += min(dp[i - 1] + a[i], dp[i - 2] + b[i-1]); int h = dp[n] / 3600 + 8; int mi = dp[n] / 60 % 60; int se = dp[n] % 60; printf("%02d:%02d:%02d ", h, mi, se); if (h > 12) printf("pm\n"); else printf("am\n"); } return 0;}

 

转载于:https://www.cnblogs.com/Friends-A/p/10324387.html

你可能感兴趣的文章
敏捷结果30天之第九天:使用必须、应该、可以来确定每天事情的优先级
查看>>
NFS在redhat中的一些简易应用
查看>>
mysqlbinlog查看编码问题
查看>>
进程通信(VC_Win32)
查看>>
MVP福利--利用Azure虚拟机玩Windows Server 2012
查看>>
Mac中将delete键定义为删除键
查看>>
python 函数关键参数
查看>>
ubuntu一键安装lamp
查看>>
漫谈 Clustering (1): k-means
查看>>
SQL Server 查询性能优化——索引与SARG(三)
查看>>
Oracle EBS:打开工作日历查看
查看>>
浅谈字节序(Byte Order)及其相关操作
查看>>
OSG闪存
查看>>
C#迭代器
查看>>
[Android] Change_xml.sh
查看>>
POJ-1925 Spiderman 动态规划
查看>>
实战BULK COLLECT(成批聚合类型)和数组集合type类型is table of 表%rowtype index by binary_integer ....
查看>>
Linux编程基础——线程概述
查看>>
Hive内部表外部表转化分析
查看>>
【转】使用Xcode和Instruments调试解决iOS内存泄露
查看>>