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;//一定要賦初值,否則其默認(rèn)初值為負(fù)數(shù),因為是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++)//從出發(fā)點開始到i站之前選擇一個最優(yōu)的
            {
                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;
}