动态规划
dp[i] 表示从起点到第i个充电站所需要的最短时间; ( 终点也算一个站,只是不用再往下走了)
#include<iostream>
using namespace std;
double L;
double N,C,T;
double VR,VT1,VT2;
double station[105];
double dp[105];
int main()
{
double RT;
double temp;
double len;
while(cin>>L)
{
cin>>N>>C>>T>>VR>>VT1>>VT2;
for(int i=1;i<=N;i++)
scanf("%lf",&station[i]);
station[i]=L;
RT=L/VR;
dp[0]=0;
if(N>=1)
{
if(C>=station[1])
dp[1]=station[1]/VT1;
else
dp[1]=C/VT1+ (station[1]-C)/VT1;
}
for(i=1;i<=N+1;i++)
{
double MIN=1000000000;
for(int j=0;j<i;j++)
{
len=station[i]-station[j];
temp= len>C? dp[j] + (len-C)/VT2+C/VT1 : dp[j]+len/VT1;
if(j>0)
temp+=T;
if(temp<MIN)
MIN=temp;
}
dp[i]=MIN;
}
if(dp[int(N)+1]>RT)
cout<<"Good job,rabbit!"<<endl;
else
cout<<"What a pity rabbit!"<<endl;
}
return 0;
}