关闭

hdoj--1260--Tickets(简单dp)

159人阅读 评论(0) 收藏 举报
分类:

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;
}

 
0
0
查看评论

POJ 1837 Balance (简单DP)

题目大意 一架天平,天平上有m个钩子,有n个砝码(2 <= c <= 20,2 <= G <= 20),天平的坐标范围为[-15,15]。 给出m个钩子的坐标c[i](-15<=c<=15),以及n个砝码的重量g[j](1 <= g <= 25),要求...
  • u013961718
  • u013961718
  • 2015-10-05 14:06
  • 308

HDU1501【简单DP】

题意: 从a串和b串中顺序地取出是否能组成c串; 思路: dp[i][j] 代表从a串中取了i个,b串中取了j个的情况; #include using namespace std; typedef long long LL; char a[220]; char b[220]; c...
  • KEYboarderQQ
  • KEYboarderQQ
  • 2016-11-05 21:00
  • 261

poj 几道简单的dp题

题目:poj 1836题意: 求使数列程先递增后递减的形式需要去掉的数字个数。当然也可以直接递减或者只递减不递增。 分析: 用最长递增子序列的方法求,然后枚举两个起点的位置即可。#include<cstdio> #include<cstring> #include<...
  • hjt_fathomless
  • hjt_fathomless
  • 2016-07-19 10:19
  • 545

zoj 1027 简单dp

/**    一道简单的dp题,刚开始有点懵了,不知道从何处下手,感觉bfs可以做的,就是怕O(3^n)的时间复杂度会超时,后来分析了一下觉得还是以两条链已经匹配的位置作为状态点然后用dp做比较合适,然后让我没想到的是数据这么弱。。。。我还没考虑其中有条链中有 ‘-’的情况呢。...
  • linmin811
  • linmin811
  • 2012-07-05 23:15
  • 379

poj1949 简单DP

Chores Time Limit: 3000MS  Memory Limit: 30000K Total Submissions: 3435  Accepted: 1622 Description Farmer John's family pitches i...
  • qiqijianglu
  • qiqijianglu
  • 2011-09-05 15:03
  • 855

hdu 1176 免费馅饼(简单dp)

免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 28821  &...
  • qq_24451605
  • qq_24451605
  • 2015-03-31 08:55
  • 340

入门级dp

题目:hdu1260 题意:每个人去买花,要么两个人一起买用一个时间,要么一个人一个人单独买,问总共的最少的时间 解答:简单dp。状态转移方程dp[i+1] = min(dp[i]+a[i+1],dp[i-1]+b[i]); #include #include #include using name...
  • Sleppypot
  • Sleppypot
  • 2016-12-02 01:50
  • 160

百练2945:拦截导弹(简单dp)

百练2945:拦截导弹(简单dp)
  • Ema1997
  • Ema1997
  • 2016-07-22 22:32
  • 191

dp专题-简单基础dp-背包

按照这个做的:http://doc.okbase.net/cc_again/archive/71796.html hdu 1864 最大报销额 01背包 方法一: double类型的背包 总数30个、每个最大1000、保留2位有效位。直接把double*100转换为int型的背...
  • ZZ_AC
  • ZZ_AC
  • 2016-03-01 20:51
  • 284

HDU DP 简单题

横竖分别求一下 最大不连续字段和即可 #include "stdio.h" #include "string.h" int dp[200001]; struct comp { int no,yes; }b[2]; int Max(int a,int...
  • u011932355
  • u011932355
  • 2014-05-13 11:04
  • 375
    个人资料
    • 访问:162967次
    • 积分:7649
    • 等级:
    • 排名:第3338名
    • 原创:628篇
    • 转载:7篇
    • 译文:0篇
    • 评论:23条
    最新评论