Tickets HDU - 1260
Tickets HDU - 1260
題意:
著名的宮崎駿動畫片《千與千尋》在中傳1500報重映,中傳學(xué)子有幸成為全國第一批觀眾。動畫學(xué)院學(xué)生會負(fù)責(zé)給大家發(fā)票,所有的中傳同學(xué)只要把中傳首映《千與千尋》的推送信息發(fā)到朋友圈并集夠10個贊,就可以免費領(lǐng)取一張電影票。帶著對童年的回憶,大家早早的就排隊等待領(lǐng)票。為了讓大家能夠早點領(lǐng)取到心儀的門票,動畫學(xué)院學(xué)生會想知道他們什么時候可以最快把票發(fā)完?
最好的方法就是分好幾處同時發(fā)票,并且在每處都盡量減少票的領(lǐng)取時間,讓相鄰的人一起領(lǐng)票。但是因為每處都只有兩位同學(xué)在發(fā)票,因此每次只能是單個人領(lǐng)票或者相鄰兩個人一起領(lǐng)票,人再多就容易處理不過來導(dǎo)致出錯或降低效率。
作為理工科的你們,更善于推理和計數(shù),假設(shè)你們知道各處排隊的人數(shù)、每個人領(lǐng)票所需的時間,以及相鄰的兩個人一起領(lǐng)票所需的時間。你們能否幫助動畫學(xué)院學(xué)生會計算一下各處分別最早能在什么時候把票發(fā)完嗎?
題解:
設(shè)dp[i]表示分發(fā)前i個人所需要的最短時間
對于第i個人,可以和第i-1個人一起領(lǐng)票,也可以自己獨自領(lǐng)票
dp[i]=min(dp[i-1]+a[i],dp[i-2]+b[i-1]);
注意題目輸出格式,已經(jīng)am/pm的情況
代碼:
#include<bits/stdc++.h> #define debug(a,b) printf("%s = %d\n",a,b); typedef long long ll; using namespace std;inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w; } const int maxn=2e4+9; int dp[maxn]; int a[maxn],b[maxn]; int main() {int t;cin>>t;while(t--){int n;cin>>n;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<n;i++)cin>>b[i];dp[0]=0;dp[1]=a[1];for(int i=2;i<=n;i++){dp[i]=min(dp[i-1]+a[i],dp[i-2]+b[i-1]);}//cout<<dp[n]<<endl;int hh=8,mm=0,ss=0;hh+=dp[n]/3600;dp[n]-=dp[n]/3600*3600;mm+=dp[n]/60;dp[n]-=dp[n]/60*60;ss+=dp[n];if(hh>=12)printf("%02d:%02d:%02d pm\n",hh,mm,ss);else printf("%02d:%02d:%02d am\n",hh,mm,ss);}return 0; }總結(jié)
以上是生活随笔為你收集整理的Tickets HDU - 1260的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新手学习电脑渗透的基础知识掌握
- 下一篇: 免费馅饼 HDU - 1176