hdu 1260 Tickets

   这道题没想到会这么快AC,就是初步的想了一下动态转移方程,写了个代码:

   动态转移方程为:Dp[0][i]=Min(Dp[0][i-1]+ar[i],Dp[1][i-1]+ar[i]);
  Dp[1][i]=Dp[0][i-1]+ans[i-1]-ar[i-1];

   其中Dp[1][i]代表这个人和前面一个人一起买的,Dp[0][i]代表自己一个人买的

 hdu <wbr>1260 <wbr>Tickets

   代码:

#include<stdio.h>

int Dp[2][2004];

int ar[2005],ans[2005];
int n;

int Min(int x,int y){
 return x<y?x:y;
}
void make(){
 int i,t;
 Dp[0][0]=0;
 Dp[1][0]=0;
 ans[0]=ar[1];
 for(i=1;i<=n;i++){
        Dp[0][i]=Min(Dp[0][i-1]+ar[i],Dp[1][i-1]+ar[i]);
  Dp[1][i]=Dp[0][i-1]+ans[i-1]-ar[i-1];
 }
 n=Min(Dp[0][n],Dp[1][n]);
}

void Cou(int x){
 if(x<10)
  printf("0");
 printf("%d",x);
}

void Pin(int h,int m,int s){
 printf(" ");
    if(h<12)
  printf("am\n");
 else{
  printf("pm\n");
 }
}

void Output(){
 int h=8,m=0,s=0;
 h+=n/3600;
 n%=3600;
 m+=n/60;
 n%=60;
 s+=n;
 Cou(h);
 printf(":");
 Cou(m);
 printf(":");
 Cou(s);
 Pin(h,m,s);
}
int main(){
    int i,t;
 scanf("%d",&t);
 while(t--){
  scanf("%d",&n);
  for(i=1;i<=n;i++)
   scanf("%d",&ar[i]);
  for(i=1;i<n;i++)
   scanf("%d",&ans[i]);
  make();
  Output();
 }
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值