题意:有 k 个人需要买电影票,a[i] 表示第 i 个人单独买票要花费的时间,b[i] 表示第 i-1 个和第 i 个人一起买票需要花费的时间,问卖给所有人各一张票最少需要到什么时候。
dp[i]表示卖完第 i 个人需要花费的最短时间
dp[i]=min(dp[i-1]+a[i],dp[i-2]+b[i]);
初始化:dp[0]=0;dp[1]=a[1];
1 #include<stdio.h> 2 #include<string.h> 3 const int maxn=2e3+5; 4 int a[maxn],b[maxn]; 5 int dp[maxn]; 6 7 inline int min(int a,int b){return a<b?a:b;} 8 9 int main(){ 10 int T; 11 scanf("%d",&T); 12 while(T--){ 13 int n; 14 scanf("%d",&n); 15 for(int i=1;i<=n;++i)scanf("%d",&a[i]); 16 for(int i=2;i<=n;++i)scanf("%d",&b[i]); 17 memset(dp,0x3f,sizeof(dp)); 18 dp[0]=0; 19 dp[1]=a[1]; 20 for(int i=2;i<=n;++i){ 21 dp[i]=min(dp[i-1]+a[i],dp[i-2]+b[i]); 22 } 23 int hour=8+dp[n]/3600; 24 int min=dp[n]%3600/60; 25 int sec=dp[n]%60; 26 bool f=0; 27 if(hour>12){ 28 f=1; 29 hour-=12; 30 } 31 if(hour<10)printf("0"); 32 printf("%d:",hour); 33 if(min<10)printf("0"); 34 printf("%d:",min); 35 if(sec<10)printf("0"); 36 printf("%d ",sec); 37 if(f)printf("pm\n"); 38 else printf("am\n"); 39 } 40 return 0; 41 }
时间: 2024-10-13 06:32:42