HDU1260-基础DP-H - Tickets

https://vjudge.net/contest/170788#problem/H
给定n个人
他们独自购票的时间
和他们临近人买票的时间,
问你如何选择,可以使时间最短。
得到状态转移方程。
dp[i]=min(dp[i-1]+单人i,dp[i-2],双人);

#include 
#include 
#include 
#include 
using namespace std;
const int maxn=4000;
int b[maxn];
int l[maxn];
int dp[maxn];
int main()
{   int t;
    int m;
    scanf("%d",&t);
    while(t--){
          scanf("%d",&m);
          for(int i=1;i<=m;i++)
              scanf("%d",&l[i]);
          for(int i=1;iscanf("%d",&b[i]);
          memset(dp,0,sizeof(dp));
          dp[1]=l[1];
          dp[2]=min(l[1]+l[2],b[1]);
          for(int i=3;i<=m;i++){
             dp[i]=min(dp[i-1]+l[i],dp[i-2]+b[i-1]);
          }
          int ans=dp[m];
          //printf("!!!!%d\n",ans);
          int ff=0;
          int xs=0;
          while(ans>=60){
              ans-=60;
              ff++;
          }
          while(ff>=60){
             ff-=60;
              xs++;
          }
          if(xs>5)
            printf("%02d:",xs+8-12);
          else
            printf("%02d:",xs+8);
          printf("%02d:",ff);
          if(xs>5)
          printf("%02d pm\n",ans);
          else
           printf("%02d am\n",ans);






    }



    return 0;
}

你可能感兴趣的:(动态规划)