HDU - 1260 (Tickets)

时间:2023-03-09 19:46:41
HDU - 1260 (Tickets)

题意:  买票    一个人要么自己买  要么和前面的人一起买   这两种情况分别有一个买票所花费的时间  求总的花费时间最小

解析:

dp[i] 表示前i个人买票总的花费时间 v[i]表示第i个人买票花费的时间  w[i]表示第i个人与前一个人买票花费的时间

则 dp[i] = min(dp[i-1]+v[i], dp[i-2]+w[i]);

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = ,INF = 0xfffffff;
int main()
{ int w[maxn],v[maxn],dp[maxn],n,T;
scanf("%d",&T);
while(T--)
{
memset(w,,sizeof(w));
memset(v,,sizeof(v));
int n;
scanf("%d",&n);
for(int i=; i<n; i++)
scanf("%d",&v[i]);
for(int i=;i<n-;++i)
scanf("%d",&w[i]);
for(int i=;i<maxn;i++)
dp[i] = INF;
dp[] = v[];
for(int i=; i<n; i++)
{
dp[i] = min(dp[i-]+v[i],dp[i-]+w[i-]);
} int t1=, t2=, t3=;
t1 = dp[n-] % ;
dp[n-]/=;
t2 = dp[n-] % ;
t3 = dp[n-]/;
printf("%02d:%02d:%02d %s\n",(t3+)%,t2,t1,(t3+)>?"pm":"am"); }
return ;
}