hdu 2059 龟兔赛跑

来源:互联网 发布:阿里云ces加内存 编辑:程序博客网 时间:2024/05/16 09:18

hdu 2059 龟兔赛跑

题目大意:就是乌龟和兔子赛跑,总路程是 l, 兔子只能匀速跑 速度为 vr,但是乌龟用电动车跑的速度为 vr1,开始的时候电动车满电,可以跑 C 距离,然后要充电,充满要 t 时间,当电传动车没电时,只能以 vr2 的速度跑。这一段路上有 n 个充电站,每一个充电站离始点的距离是 s[i] ,求谁先到达。

解题思路:状态dp 。 以每个充电站作为判断点。

#include <iostream>#include<cstdio>#define inf 0xfffffusing namespace std;double Min(double x,double y){    return x<y?x:y;}int main(){    double l,vr,vt1,vt2,s[110],dp[110],len,time;    int n;    double c,t;    while(scanf("%lf",&l)!=EOF)    {        scanf("%d%lf%lf",&n,&c,&t);        scanf("%lf%lf%lf",&vr,&vt1,&vt2);        for(int i=1;i<=n;i++)        {            scanf("%lf",&s[i]);        }        s[0]=0;        s[n+1]=l;        dp[0]=0;        for(int i=1;i<=n+1;i++)        {            dp[i]=inf;            for(int j=0;j<i;j++)            {                len=s[i]-s[j];                if(len>c)                {                    time=c/vt1+(len-c)/vt2;                }                else                {                    time=len/vt1;                }                time+=dp[j];                if(j>0)                {                    time+=t;                }                dp[i]=Min(dp[i],time);            }        }        if(dp[n+1]<l/vr)            printf("What a pity rabbit!\n");        else            printf("Good job,rabbit!\n");    }    return 0;} // 这个题是 dp 的入门题 。画个图,一个一个状态去分析很简单就理解了。

0 0
原创粉丝点击