题目链接:https://vjudge.net/problem/HDU-1260#author=sharpland
题意:有k个人买票,每个人可以和前面一个人共同购买,一次最多两人同时一起购买。求最小花费时间。
思路:dp【i】表示到第i个人的最小花费。有两种抉择 1.和前面那个人一起购买dp【i】=dp【i-2】+b【i】 2.自己单独购买 dp【i】=dp【i-1】+a【i】
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <unordered_map>
using namespace std;
int a[2005],dp[2005],b[2005];
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int k;
scanf("%d",&k);
for(int i=1; i<=k; i++)
{
scanf("%d",&a[i]);
}
for(int i=2; i<=k; i++)
{
scanf("%d",&b[i]);
}
dp[1]=a[1];
for(int i=2; i<=k; i++)
{
int cnt1=dp[i-1]+a[i];
int cnt2=dp[i-2]+b[i];
dp[i]=min(cnt1,cnt2);
}
int h,m,s;
h=dp[k]/3600;
m=(dp[k]-3600*h)/60;
s=dp[k]-3600*h-60*m;
printf("%02d:%02d:%02d ",h+8,m,s);
if(h+8>=12)
printf("pm\n");
else
printf("am\n");
}
return 0;
}