zoukankan      html  css  js  c++  java
  • 杭电2059龟兔赛跑

    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[n];

    我们需要比较的是兔子的时间和乌龟的时间

    兔子:1.0*l/vr;

    乌龟:

    乌龟的时间由题意可得,是需要最短的,所以我们只需要找出乌龟到终点的num种时间,并在这num种时间里找出最短的即可。

    比如乌龟从加油站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!
    ");
    		else
    			printf("Good job,rabbit!
    ");
    	}
    }
    

      

  • 相关阅读:
    责任链模式
    状态模式
    命令模式
    策略模式
    迭代器模式
    适配器模式
    装饰模式
    合成模式
    brew php 提示
    sarafi浏览器iframe跨域cookie无效的处理方案(笨方法,看官莫笑)
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4006070.html
Copyright © 2011-2022 走看看