每次前面所有情况都要考虑
#include<iostream>
#include<cstdio>
#define MAX 1000000.0
using namespace std;
int main()
{
int L;
int n,c,t;
int vr,vt1,vt2;
int p[105];
float dp[105];
int i,j;
while(scanf("%d",&L)!=EOF)
{
scanf("%d%d%d",&n,&c,&t);
scanf("%d%d%d",&vr,&vt1,&vt2);
p[0]=0;
for(i=1;i<=n;i++)
{
scanf("%d",&p[i]);
}
p[n+1]=L;
dp[0]=0.0;
float time,MIN;
//在起点的时候一定充电开始走
for(i=1;i<=n+1;i++)
{
dp[i]=MAX;
for(j=0;j<i;j++)
{
int len=p[i]-p[j]; //从第j个充电点到第i个充电点的长度
if(len>=c) {time=1.0*c/vt1+1.0*(len-c)/vt2;} // 当两个充电点之间的长度大于充一次电所能走的长度时
else {time=1.0*len/vt1;} // 当两个充电点之间长度小于充一次电所能走的长度时
if(j) time+=t; //如果不是起点充电,那么就要加上充电时间
time+=dp[j]; //加上从起点到j点的最小时间
dp[i]=dp[i]<time?dp[i]:time;
}
}
if(dp[n+1]<1.0*L/vr)
printf("What a pity rabbit!\n");
else
printf("Good job,rabbit!\n");
}
return 0;
}