杭电2059龟兔赛跑
2014-10-04 15:44
176 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2059
我们需要输入的有
(1)l
(2)n,c,t;
(3)vr,v1,v2;
(4)p[1],p[2],p[3], p
;
我们需要比较的是兔子的时间和乌龟的时间
兔子:1.0*l/vr;
乌龟:
乌龟的时间由题意可得,是需要最短的,所以我们只需要找出乌龟到终点的num种时间,并在这num种时间里找出最短的即可。
![](http://images.cnitblog.com/blog/666744/201410/041535176128707.png)
比如乌龟从加油站1到加油站4一共有四种不同时间的走法
1---2---3---4;
1---2---4;
1---4;
1---3---4;
如果要求乌龟从加油站1到加油站4的最短时间,即把这四种不同走法的时间分别算出来,取最小的即可。
同理,从第1个站到第i个站的时间加起来,即为所求,这儿就可以for循环语句来处理。
这样,就算出了乌龟所需的最短时间。
我们需要输入的有
(1)l
(2)n,c,t;
(3)vr,v1,v2;
(4)p[1],p[2],p[3], p
;
我们需要比较的是兔子的时间和乌龟的时间
兔子:1.0*l/vr;
乌龟:
乌龟的时间由题意可得,是需要最短的,所以我们只需要找出乌龟到终点的num种时间,并在这num种时间里找出最短的即可。
![](http://images.cnitblog.com/blog/666744/201410/041535176128707.png)
比如乌龟从加油站1到加油站4一共有四种不同时间的走法
1---2---3---4;
1---2---4;
1---4;
1---3---4;
如果要求乌龟从加油站1到加油站4的最短时间,即把这四种不同走法的时间分别算出来,取最小的即可。
同理,从第1个站到第i个站的时间加起来,即为所求,这儿就可以for循环语句来处理。
这样,就算出了乌龟所需的最短时间。
#include<stdio.h> int main() { int l,n,c,t,vr,v1,v2,p[105],i,j,len; double min,e,dp[105]; while(scanf("%d",&l)!=EOF) { scanf("%d%d%d",&n,&c,&t); scanf("%d%d%d",&vr,&v1,&v2); for(i=1;i<=n;i++) scanf("%d",&p[i]); p[0]=0; p[i]=l; dp[0]=0; for(i=1;i<n+2;i++) { min=0xffffff; for(j=0;j<i;j++) { len=p[i]-p[j]; e=c>len?1.0*len/v1:c*1.0/v1+(len-c+0.0)/v2; e+=dp[j];//前j个站点的时间累加 if(j) e+=t;//加油所需的时间 if(min>e) min=e; } dp[i]=min;//到第i个站的最短时间 } if(1.0*l/vr>dp[n+1]) printf("What a pity rabbit!\n"); else printf("Good job,rabbit!\n"); } }
相关文章推荐
- 杭电hdu 2059 龟兔赛跑 动态规划
- 【杭电2059】经典DP--龟兔赛跑
- 【HDU 杭电 2059 龟兔赛跑】
- 杭电-2059 龟兔赛跑 (基础DP)
- 杭电2059龟兔赛跑
- 【杭电oj】2059 - 龟兔赛跑(动态规划)
- 杭电ACM2059——龟兔赛跑~~DP
- 杭电2059龟兔赛跑
- 杭电2059-龟兔赛跑 (超详细解释!!!)
- 杭电 2059 龟兔赛跑
- 龟兔赛跑,杭电oj-2059
- 杭电acm 2059 龟兔赛跑
- 杭电2059——龟兔赛跑
- 杭电 2059 龟兔赛跑
- hdoj2059 龟兔赛跑
- HDU 2059 龟兔赛跑(DP)
- HDU2059 龟兔赛跑 【DP】
- hdu 2059 龟兔赛跑 动态规划
- HDU 2059龟兔赛跑(多段决策dp)
- HDU 2059 龟兔赛跑