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;
}