题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1260
dp[i]为到第i个人买完票花费的时间。
每次决策两种选择,自己买自己的或者前一个人替自己买。即 dp[i]=min(dp[i-2]+co[i-1],dp[i-1]+p[i]);
哈哈发现稍微做几个题就有点感觉了。虽然做的都是很简单的题吧,慢慢来。。。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int maxn=2010; 6 int dp[maxn]; 7 int p[maxn],co[maxn]; 8 int n; 9 int main() 10 { 11 int t; 12 scanf("%d",&t); 13 while(t--) 14 { 15 scanf("%d",&n); 16 for(int i=1;i<=n;i++) 17 scanf("%d",&p[i]); 18 for(int i=1;i<=n-1;i++) 19 scanf("%d",&co[i]); 20 memset(dp,0,sizeof(dp)); 21 dp[1]=p[1]; 22 for(int i=2;i<=n;i++) 23 dp[i]=min(dp[i-2]+co[i-1],dp[i-1]+p[i]);//自己买或者前一个人代买 24 int s=dp[n]; 25 int m=s/60; 26 int h=m/60+8; 27 m%=60; 28 s%=60; 29 if(h<12) printf("%02d:%02d:%02d am ",h,m,s); 30 else printf("%02d:%02d:%02d pm ",h%12,m,s); 31 32 33 } 34 35 }