acm2059

学长的帮助下写的

#include<stdio.h>

double l;
double p[105];
double time[105];
int main(void)
{
int i,j;
double timet;
scanf("%lf",&l);
scanf("%d%d%d",&n,&t,&c);//加油站的个数 加一次油的时间 加一次油可以走的路
scanf("%d%d%d",&vr,&vt1,&vt2);//兔子的速度 乌龟骑车的速度 乌龟本身的速度
for(i=1;i<=n;i++)
scanf("%d",&p[i]);
p[0]=0;
p[n+1]=l;
timet=l/vr;
for(i=1;i<=n+1;i++)
{
min=0xfffff;
for(j=0;j<i;j++)//找到一个合适的加油站J
{
int len=p[i]-p[j];//从j到i的距离
double t1=len>c?t+(len-c)*1.0/vt2:1.0*len/vt1;
t1+=time[j];
if(j)//j加油站加油
t1+=t;
if(min>t)
min=t;
}
time[i]=min;
}
puts ( timet > time[n+1] ? "What a pity rabbit!" : "Good job,rabbit!" );

return 0;
}


/*思路:第二层循环从0到i找到一个最适合的加油站j 保证从起点到i的时间是最短的
这个最短的时间的值 =(从0到J点最短的时间(保存在bst{j}中))+在j的充电时间t+从j到i的时间 。
这个和的最小值就是这个最短的时间的值 再把这个时间存到bst[j]中 */

原文地址:https://www.cnblogs.com/aloney/p/4544583.html