Tickets

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

Total Submission(s): 2146    Accepted Submission(s): 1039

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
 
Source
 
Recommend
JGShining   |   We have carefully selected several similar problems for you:  1160 1074 1069 1159 1114

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define MAX 101000
int dp[MAX],man[MAX],two[MAX];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
memset(man,0,sizeof(man));
memset(two,0,sizeof(two));
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 p=28800+dp[n];
int h=p/3600;
int m=p%3600/60;
int s=(p%3600)%60;
if(p>=43200)
{
if(h>12)
h-=12;
printf("%02d:%02d:%02d pm\n",h,m,s);
}
else
printf("%02d:%02d:%02d am\n",h,m,s);
}
return 0;
}

最新文章

  1. nodejs异步处理
  2. IOS开发的基础知识
  3. 判断 JS 中对象的类型
  4. dataGrid查询表格
  5. NumPy的详细教程
  6. android里TextView加下划线的几种方式
  7. 数据库 SQL基础
  8. Foxit Reader 插件下载
  9. iOS 23 种设计模式
  10. Git CMD - merge: Join two or more development histories together
  11. PHPCMS v9构建模块
  12. Leetcode算法刷题:第112题 Path Sum
  13. 使用jquery+一般处理程序异步载入信息
  14. 交叉编译libxml2
  15. 201521123053 《Java程序设计》第5周学习总结
  16. override与重载(overload)的区别
  17. python学习第37天
  18. 开始使用Filebeat
  19. 分布式版本控制系统Git的安装和使用
  20. Redis的核心Hystrix在Spring mvc的使用

热门文章

  1. HDOJ 题目3518 Boring counting(后缀数组,求不重叠反复次数最少为2的子串种类数)
  2. nyoj--68--三点顺序(数学)
  3. C# First and FirstOrDefault 方法详解
  4. 13.ubuntu下Qt5无法使用中文的问题解决
  5. block的一些注意事项
  6. Spark on YARN运行模式(图文详解)
  7. performSelector与objc_msgSend
  8. Django中ORM之创建模型
  9. Maven private reprository 更新
  10. pytorch实战(2)-----回归例子