暑期dp46道(21)HDOJ 2059 龟兔赛跑

题目链接:HDOJ 2059



题意:略,咳咳,大家都看得懂


题解:很明显兔子跑完全程的时间很容易就出来了,而且题目数据保证不会出现乌龟和兔子同时到达的情况,所以我们只要求出乌龟跑到终点的最短时间,和兔子的时间对比下就好了。

这个全程有n个充电站可以供给乌龟充电,我们可以设有n+2个充电站,第一个在起点,且不需充电的耗时,第二个在终点,对于第i个充电站(1<=i<=n+1)求出乌龟到达该充电站的最优解,就可


最优解求法:
dp[0] = 0;

dp[i] = dp[j] + Min(t1,t2);//t1表示到达j后充电电满然后到达i所需时间,t2表示到达j后步行到i的时间

PS:如果j ==0 ,充电时间为0,求t1的时候要考虑dis和C的大小,如果电动车       的行驶距离不够要换步行;


上代码:

#include
#include
#include
#include
#include
using namespace std;
#define debug 0
#define M(a,b) memset(a,b,sizeof(a))
#define Max(a,b) ((a>b)?a:b)
#define Min(a,b) ((a 1.0 * L/ vr)
    {
        printf("Good job,rabbit!\n");
    }
    else{
        printf("What a pity rabbit!\n");
    }
}
int main()
{
#if debug
    freopen("in.txt","r",stdin);
#endif//debug
    while(~scanf("%d%d%d%d",&L,&n,&c,&t))
    {
        scanf("%d%d%d",&vr,&vt1,&vt2);
        
        REP(n)
        scanf("%d",&a[i]);
        
        REP(n + 1)
        dp[i] = 0x3f3f3f;
        
        Do();
    }
    return 0;
}


你可能感兴趣的:(大一暑期集训-梦最初)