http://acm.hdu.edu.cn/showproblem.php?pid=2059
#include < iostream >
using   namespace  std;
struct  Node
{
    
double tim;
    
double ls;
}
;
int  main()
{
    
double S;
    
while(cin>>S)
    
{
        
int n,i,j;
        
double L,time,rv,tortoiseC,tortoiseQ,pos[103];
        Node dp[
103],temp;
        
double d,d1,d2,t1,t2;
        cin
>>n>>L>>time;
        cin
>>rv>>tortoiseQ>>tortoiseC;
        
for(i=1;i<=n;i++)
            cin
>>pos[i];
        
if(tortoiseQ<=tortoiseC)//骑车不如蹬车
        {
            
if(S/tortoiseC>S/rv)
                cout
<<"Good job,rabbit!"<<endl;
            
else
                cout
<<"What a pity rabbit!"<<endl;
            
continue;
        }

        dp[
0].tim=0;
        dp[
0].ls=L;
        pos[
0]=0;//一定要赋初值,否则其默认初值为负数,因为是double类型
        pos[n+1]=S;
        
for(i=1;i<=n+1;i++)
        
{
            dp[i].tim
=100000000;
            dp[i].ls
=0;
            
for(j=0;j<i;j++)//从出发点开始到i站之前选择一个最优的
            {
                d
=pos[i]-pos[j];
                
if(dp[j].ls>=d)//无需充电
                {
                    temp.tim
=dp[j].tim+d/tortoiseQ;
                    temp.ls
=dp[j].ls-d;
                }

                
else
                
{
                    t1
=dp[j].tim+dp[j].ls/tortoiseQ+(d-dp[j].ls)/tortoiseC;
                    d1
=0;
                    
if(L>=d)//充电够用情况
                    {
                        t2
=dp[j].tim+time+d/tortoiseQ;
                        d2
=L-d;
                    }

                    
else//充电不够用情况
                    {
                        t2
=dp[j].tim+time+L/tortoiseQ+(d-L)/tortoiseC;
                        d2
=0;
                    }


                    
if(t1<t2)//选择时间最少的
                    {
                        temp.tim
=t1;
                        temp.ls
=d1;
                    }

                    
else
                    
{
                        temp.tim
=t2;
                        temp.ls
=d2;
                    }

                }

                
if(temp.tim < dp[i].tim)
                
{
                    dp[i].tim
=temp.tim;
                    dp[i].ls
=temp.ls;
                }

            }
//for(j=0;j<i;j++)
        }
//for(i=1;i<=n+1;i++)
        if(dp[n+1].tim>S/rv)
            cout
<<"Good job,rabbit!"<<endl;
        
else
            cout
<<"What a pity rabbit!"<<endl;
    }

    
return 0;
}