题意:知道一个人买票花的时间和和前面那个人一起买票花的时间,问最少花多少时间可以把票卖完.
给出T,表示有T组样例
给出n,表示有n个人买票.
给出n个数表示这个人单独买票会花的时间.
给出n-1个数,表示这个人和前面那个人一起买票会花的时间.
思路:dp[i]=min(dp[i-1]+a[i],dp[i-2]+b[i]);
1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 #include<cstdlib> 5 #include<cstdio> 6 #include<set> 7 #include<map> 8 #include<vector> 9 #include<cstring> 10 #include<stack> 11 #include<cmath> 12 #include<queue> 13 #include <bits/stdc++.h> 14 using namespace std; 15 #define INF 0x3f3f3f3f 16 #define ll long long 17 #define clc(a,b) memset(a,b,sizeof(a)) 18 const int maxn=4010; 19 20 int main() 21 { 22 int t; 23 int n,a[2010]; 24 int dp[2010]; 25 int b[2010]; 26 scanf("%d",&t); 27 while(t--) 28 { 29 scanf("%d",&n); 30 clc(a,0); 31 clc(b,0); 32 clc(dp,0); 33 for(int i=1;i<=n;i++) 34 { 35 scanf("%d",&a[i]); 36 // dp[i]=INF; 37 } 38 for(int i=2;i<=n;i++) 39 scanf("%d",&b[i]); 40 dp[1]=a[1]; 41 for(int i=2;i<=n;i++) 42 { 43 dp[i]=min(dp[i-1]+a[i],dp[i-2]+b[i]); 44 } 45 int h=dp[n]/3600; 46 int m=dp[n]%3600/60; 47 int s=dp[n]%60; 48 printf("%02d:%02d:%02d%s ", (8+h)%24, m, s, (h+8)%24>12?" pm":" am"); 49 } 50 return 0; 51 }