本题考虑当前的人是否和前面的人一起买票,所以有两种可能
动规方程:dp[i]=min(dp[i-1]+a[i],dp[i-2]+b[i]);
代码如下:
<span style="font-size:14px;">#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
using namespace std;
int a[2010],b[2010];
int dp[2010];
int main()
{
int t,n,h,m,s;
cin>>t;
while(t--)
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=2;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]);
}
h= dp[n]/3600;
m= dp[n]%3600/60;
s= dp[n]%60;
printf("%02d:%02d:%02d%s\n",(8+h)%24,m,s,(h+8)%24>12?" pm":" am");
}
return 0;
}</span>