杭电2059
1 //动态规划思路 2 #include<stdio.h> 3 int a[150]; 4 double dp[150]={0}; 5 int main() 6 { 7 double min(double x,double y); 8 int len,n,maxlen,i,j,lenth; 9 double time,vmax,vmin,vr,t; 10 while(~scanf("%d%d%d%lf%lf%lf%lf",&len,&n,&maxlen,&time,&vr,&vmax,&vmin)) 11 { 12 a[0]=0; a[n+1]=len; 13 for(i=1; i<n+1; ++i) 14 scanf("%d",&a[i]); 15 for(i=1; i<=n+1; ++i) 16 { 17 dp[i]=len/vmin+1;//保证够大才能比较出最小值 18 for(j=0; j<i; ++j) 19 { 20 lenth=a[i]-a[j]; 21 if(lenth>maxlen) 22 t=maxlen/vmax+(lenth-maxlen)/vmin; 23 else 24 t=lenth/vmax; 25 t+=dp[j]; 26 if(j) 27 t+=time; 28 dp[i]=min(dp[i],t);//计算i之前j发电站到i的时间最小值 29 } 30 } 31 if(dp[n+1]<len/vr) 32 printf("What a pity rabbit!\n"); 33 else 34 printf("Good job,rabbit!\n"); 35 } 36 } 37 38 double min(double x,double y) 39 { 40 double z=x<y?x:y; 41 return z; 42 }