E - Tickets HDU - 1260
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.
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.
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.
2 2 20 25 40 1 8
08:00:40 am 08:00:08 am
这题真心是想吐血不知道要怎么说,很快就写完了蛮简单了 就是题目题目题目我读错了或者说是看不懂吧 心痛痛到无法呼吸 后来百度下知道题目了心中有千万只XXXX在狂奔
是一道简单的动态规划的问题
代码如下 :
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int num[2005]; int total[2005]; int dp[2005]; int main() { int n,k,i,j; scanf("%d",&n); int sum; while(n--) { scanf("%d",&k); for(i=1;i<=k;i++) scanf("%d",&num[i]); for(i=2;i<=k;i++) scanf("%d",&total[i]); memset(dp,0,sizeof(dp)); if(k==1) sum=num[1]; else if(k==2) sum=min(total[2],num[1]+num[2]); else { dp[0]=0; dp[1]=num[1]; for(i=2;i<=k;i++) { dp[i]=min(dp[i-2]+total[i],dp[i-1]+num[i]); } sum=dp[k]; } int hh,mm,ss; ss=sum%60; mm=sum/60%60; hh=sum/3600+8; if(hh<=12) printf("%02d:%02d:%02d am\n",hh,mm,ss); else printf("%02d:%02d:%02d pm\n",hh-12,mm,ss); } return 0; }