标签:dp
公式很简单,就是初值要处理好就可以了
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; const int inf=9999999; int s[2005],d[2005],dp[2005][2];//dp[i][0]第i个数独立处理时,前i个数的最大值 dp[i][1]第i个数和前面的数一起处理时,前i个数的最大值 int main(){ #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif int t,n; scanf("%d",&t); while(t--){ scanf("%d",&n); for(int i=1;i<=n;i++) { dp[i][0]=inf; dp[i][1]=inf; } for(int i=1;i<=n;i++) scanf("%d",&s[i]); for(int i=2;i<=n;i++) scanf("%d",&d[i]); dp[1][0]=s[1]; dp[1][1]=s[1]; dp[0][0]=0; dp[0][1]=0; for(int i=2;i<=n;i++){ dp[i][0]=min(dp[i-1][1],dp[i-1][0])+s[i]; dp[i][1]=min(dp[i-2][0],dp[i-2][1])+d[i]; } int ans=min(dp[n][0],dp[n][1]); int h,m,s; h=ans/3600; ans=ans%3600; m=ans/60; ans=ans%60; s=ans; int flag=0; if(8+h>=12) { flag=1; h-=12; } if(8+h<10) printf("0%d:",8+h); else printf("%d:",8+h); if(m<10) printf("0"); printf("%d:",m); if(s<10) printf("0"); if(flag==0) printf("%d am\n",s); else printf("%d pm\n",s); } }
标签:dp
原文地址:http://blog.csdn.net/lj94093/article/details/45308067