Dp+hdu亀ウサギ競走2059


/**
       ,  ,  ,    。
dp[i]  :     i            
dp[i] = min{dp[i],dp[j] + time}  j < i and time j i       (      )
   L   ,  N+2    (       )
*/
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>

using namespace std;

const int INF = 1000000;
const int MAXN = 110;

double dp[MAXN];

int L;
int N, C, T;
int VR, VT1, VT2;
int pos[MAXN];


int main()
{
    int i,j;
    while( ~scanf("%d", &L) )
    {
        cin>>N>>C>>T;
        cin>>VR>>VT1>>VT2;
        for(i = 1; i <= N; ++i)
            cin>>pos[i];
        pos[0] = 0;
        pos[N+1] = L;
        double rabtime = ( L*1.0/VR);//     
        for(i = 0; i < MAXN; ++i)
            dp[i] = INF;
        dp[0] = 0;
        for(i = 1; i <= N+1; ++i)//             
        {
            for(j = 0; j < i; ++j)
            {
                double time;//      j       i   
                if( pos[i] - pos[j] <= C )
                    time = (pos[i] - pos[j])*1.0/VT1 + T;
                else
                    time = (C*1.0)/VT1 + (pos[i] - pos[j] - C)*1.0 / VT2 + T;
                if( !j )//        ,    
                    time = time - T;
                dp[i] = min( dp[i], dp[j] + time);//   i            (    i                   )
            }
        }
        if( dp[ N+1 ]  >= rabtime )
            cout<<"Good job,rabbit!"<<endl;
        else
            cout<<"What a pity rabbit!"<<endl;
    }
    return 0;
}