要算起点到第i个充电点的最短时间,做一个循环,依次求出从各个充电点充满电后到第i个充电点的时间tem,由于起点到该点的时间前面已经求出为tp[j],所以起点到该点的时间为tp[j]+tem选出里面的最短时间作为tp[i],在依次求出后面的最短时间就可以求出总的最短时间了
#include<iostream>
using namespace std;
int main()
{
int i,j,p[102],l,n,c,t,vr,v1,v2,len;
double tp[102],min,tem,tr;
while(cin>>l)
{
cin>>n>>c>>t>>vr>>v1>>v2;
tp[0]=p[0]=0;
tr=1.0*l/vr;
for(i=1;i<=n;i++)
{
cin>>p[i];
}
p[i]=l;
for(i=1;i<n+2;i++)
{
min =20000000;//要让min的初始值尽量大
for (j=0;j<i;j++)
{
len=p[i]-p[j];
if(len>c)
tem=1.0*c/v1+(len-c+0.0)/v2;//注意要让tem为double型的,所以要乘以1.0或加0.0
else
tem=1.0*len/v1;
tem+= tp[j];
if(j)
{
tem += t;
}
if (min>tem)
{
min=tem;
}
}
tp[i]=min;
}
if(tr>tp[n+1])
{
cout<<"What a pity rabbit!"<<endl;
}
else
cout<<"Good job,rabbit!"<<endl;
}
return 0;
}