题意:n张票,n个数代表n个买票时间,n-1个数代表相邻一起买的买票时间,求最小的买票时间,并按格式输出。
动态规矩,d[i]=min(d[i-1]+s[i],d[i-2]+a[i-1]),(s[i]为单张时间,a[i]为第i张和后一张一起买的时间)。
格式输出注意补零,注意上午下午。
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define N 2200
using namespace std;
int a[N],s[N],d[N];
int main()
{
int T,n,ss,mm,hh;
cin>>T;
while(T--)
{
cin>>n;
for(int i=1;i<=n;i++) scanf("%d",&s[i]);
for(int i=1;i<n;i++) scanf("%d",&a[i]);
d[0]=0;
d[1]=s[1];
for(int i=2;i<=n;i++)
d[i]=min(d[i-1]+s[i],d[i-2]+a[i-1]);
ss=d[n]%60;
d[n]/=60;
mm=d[n]%60;
d[n]/=60;
hh=(d[n]+8)%12;
d[n]=(d[n]+8)/12;
printf("%02d:%02d:%02d ",hh,mm,ss);
if(d[n]%2) cout<<"pm"<<endl;
else cout<<"am"<<endl;
}
}