题意:给出每个人单独买票时间和每个人和前面那个人一起买票的时间,求最小时间
思路:因为只与时间有关,与时间有关的只有人,所以dp状态的定义很容易,但在推dp 方程的时候出了一点小问题,还是么读清楚题目
代码:
#include <bits/stdc++.h> using namespace std; const int maxn=2007; int dp[maxn],a[maxn],b[maxn]; int main() { int t; scanf("%d",&t); while(t--){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } for(int i=2;i<=n;i++){ scanf("%d",&b[i]); } memset(dp,0x3f,sizeof(dp)); dp[0]=0; dp[1]=a[1]; for(int i=2;i<=n;i++){ dp[i]=min(dp[i-1]+a[i],dp[i-2]+b[i]); } int hh = dp[n]/3600; int mm = dp[n]%3600/60; int ss = dp[n]%60; printf("%02d:%02d:%02d%s ", (8+hh)%24, mm, ss, (hh+8)%24>12?" pm":" am"); } return 0; }