动态规划,状态转移方程:d[i]=min(d[i-1]+a[i],d[i-2]+b[i]);
a[i]为第i个人买票花的时间,b[i]为第i-1和第i个人一起买票花的时间,d[i]保存给前i个人买票最少花的时间
意思就是给第i个人买票,要么单独买,要么和前一个人一起买,选一个最优的就好
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<stack>
using namespace std;
const int N=2000+10;
const int INF=0x7f7f7f7f;
int d[N];
int a[N],b[N];
int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=2;i<=n;i++)
scanf("%d",&b[i]);
memset(d,INF,sizeof(d));
d[0]=0;
d[1]=a[1];
for(int i=2;i<=n;i++)
d[i]=min(d[i-1]+a[i],d[i-2]+b[i]);
int h,m,s=d[n];
bool flag=true;
m=s/60;
s%=60;
h=m/60;
m%=60;
h+=8;
if(h>12)
{
h%=12;
flag=false;
}
printf("%02d:%02d:%02d %s\n",h,m,s,flag?"am":"pm");
}
return 0;
}