
题意: 买票 一个人要么自己买 要么和前面的人一起买 这两种情况分别有一个买票所花费的时间 求总的花费时间最小
解析:
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 ;
}