您的位置:首页

HDU 1260 Tickets (动规)

2017-08-11 08:45 232 查看

Tickets

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

Total Submission(s): 924 Accepted Submission(s): 468


[align=left]Problem Description[/align]
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.

[align=left]Input[/align]
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.

[align=left]Output[/align]
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.

[align=left]Sample Input[/align]

2
2
20 25
40
1
8


[align=left]Sample Output[/align]

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


[align=left]Source[/align]
浙江工业大学第四届大学生程序设计竞赛

[align=left]Recommend[/align]
JGShining | We have carefully selected several similar problems for you: 1074 1114 1264 1024 1265

解题思路:

一个人能够单独买票花费一定的时间。也能够两个人一起买票。也给定一个时间,

给出K个人的单独买票时间和K-1个相邻的两个人一起买票的时间,问一共花费的最小时间。

map[]表示一个人单独买的时间。v[]表示两个人一起买的时间。

决策就是,这两个人是一起买还是分开买。

代码:0MS

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
#define M 2050
#define INF 999999
int map[M],v[M],dp[M];
int main()
{
int i,n,m,t,j,k;
while(cin>>t)
{
while(t--)
{
cin>>n;
for(i=1;i<=n;i++)
cin>>map[i];            //单独买票的时间。
for(i=1;i<=n-1;i++)
cin>>v[i];              //一起买票的时间。
for(i=0;i<=n;i++) dp[i]=(i==0?0:INF);
dp[1]=map[1];
for(i=2;i<=n;i++)
{
dp[i]=min(dp[i-1]+map[i],dp[i-2]+v[i-1]);  //决策。

}
int h = dp[n] / 3600 + 8;         //将时间转换。

int m = dp[n] / 60 % 60;
int s = dp[n] % 60;
printf("%02d:%02d:%02d am\n", h, m, s);  //没有两位的补足前到零。
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: