题目描述
输入
输出
样例输入
2
2
20 25
40
1
8
样例输出
08:00:40 am
08:00:08 am
分析:
经典DP题目。状态转移方程:dp[i]=min(dp[i-1]+a[i],dp[i-2]+b[i])

#include <stdio.h> #include <string.h> int min(int a,int b){ return a>b?b:a; } int a[2005],b[2005],dp[2005]; int main(int argc, char *argv[]) { int t,temp,h; scanf("%d",&t); while(t--){ memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(dp,0,sizeof(dp)); int n; 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]); dp[1]=a[1]; dp[2]=min(a[1]+a[2],b[2]); for(int i=3;i<=n;++i)dp[i]=min(dp[i-1]+a[i],dp[i-2]+b[i]); temp=dp[n]; h=8+temp/3600; printf("%02d:%02d:%02d %cm ",h>12?h-12:h,temp%3600/60,temp%60,h>12?'p':'a'); } return 0; }