当前位置:编程学习 > C/C++ >>

hdu 2059 简单动态规划

该题目需要从整体考虑,对于充电站和终点这N+1个点,到达他们的最短时间肯定是从他们前边的某个点冲完电后直接到达的。用t[i]记录到第i个点时的最短距离,则t[i]就是从0——>(i-1)这些点冲满电直接到点i所用时间的最小值。
[cpp]  
#include<stdio.h>  
int L,N,C,T,Vr,Vt1,Vt2,q[111];  
double t[111];  
  
void time()  
{  
 int i,j;  
 double min,tim;  
 for(i=1;i<=N+1;i++)  
 {  
  if(C>=q[i])  
   min=1.0*q[i]/Vt1;  
  else  
   min=1.0*C/Vt1+1.0*(q[i]-C)/Vt2;  
  for(j=1;j<i;j++)  
  {  
   if(C>=q[i]-q[j])  
    tim=1.0*(q[i]-q[j])/Vt1+1.0*t[j]+1.0*T;  
   else  
    tim=1.0*C/Vt1+1.0*(q[i]-q[j]-C)/Vt2+1.0*t[j]+1.0*T;  
   if(tim<min)  
    min=tim;  
  }  
  t[i]=min;  
 }  
}  
  
int main()  
{  
 int k;  
 double Tr,Tt;  
 while(scanf("%d",&L)!=EOF)  
 {  
  scanf("%d%d%d%d%d%d",&N,&C,&T,&Vr,&Vt1,&Vt2);  
  for(k=1;k<=N;k++)  
  {  
   scanf("%d",&q[k]);  
  }  
  q[N+1]=L;  
  time();  
  Tr=1.0*L/Vr;  
  Tt=t[N+1];  
  if(Tr<Tt)  
   printf("Good job,rabbit!\n");  
  else  
   printf("What a pity rabbit!\n");  
 }  
 return 0;  
}  
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,