Dp+hdu亀ウサギ競走2059
1685 ワード
/**
, , , 。
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;
}