Tickets
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1260
解题思路:
状态转移方程:dp[i] = min(dp[i-1]+单独买花的时间, dp[i-2]+和前面那个人一起买花的时间)
初始状态为dp[1] = 第一个人单独买话的时间。
AC代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 2005;
int s[N],d[N];
int dp[N];
int main(){
int T;
scanf("%d",&T);
while(T--){
memset(dp,0,sizeof(dp));
int n;
scanf("%d",&n);
for(int i = 1; i <= n; ++i)
scanf("%d",&s[i]);
for(int i = 2; i <= n; ++i)
scanf("%d",&d[i]);
dp[1] = s[1];
for(int i = 2; i <= n; ++i)
dp[i] = min(dp[i-1]+s[i],dp[i-2]+d[i]);
int hh,mm,ss;
hh = dp[n]/3600;
mm = dp[n]%3600/60;
ss = dp[n]%60;
printf("%02d:%02d:%02d%s\n",(8+hh)%24,mm,ss,(hh+8)%24>12?" pm":" am");
}
return 0;
}