hdu1260 dp

时间:2023-03-09 19:11:31
hdu1260 dp

题意:有 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];

 #include<stdio.h>
#include<string.h>
const int maxn=2e3+;
int a[maxn],b[maxn];
int dp[maxn]; inline int min(int a,int b){return a<b?a:b;} int main(){
int T;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
for(int i=;i<=n;++i)scanf("%d",&a[i]);
for(int i=;i<=n;++i)scanf("%d",&b[i]);
memset(dp,0x3f,sizeof(dp));
dp[]=;
dp[]=a[];
for(int i=;i<=n;++i){
dp[i]=min(dp[i-]+a[i],dp[i-]+b[i]);
}
int hour=+dp[n]/;
int min=dp[n]%/;
int sec=dp[n]%;
bool f=;
if(hour>){
f=;
hour-=;
}
if(hour<)printf("");
printf("%d:",hour);
if(min<)printf("");
printf("%d:",min);
if(sec<)printf("");
printf("%d ",sec);
if(f)printf("pm\n");
else printf("am\n");
}
return ;
}