开始就觉得有思路,结果越敲越麻烦。。。
题意很简单,就是说一个青蛙从0点跳到m点,最多可以跳l的长度,原有石头n个(都仅表示一个点)。但是可能跳不过去,所以你是上帝,可以随便在哪儿添加石头,你的策略是让青蛙跳过去的次数最多,但是你添加了石头后,青蛙会选择最少的次数跳过去,问青蛙跳的次数最多是多少。
原有石头与现在的距离不大于l,就找最远的那个可以跳的石头跳过去。接下来就是主要解决现在的位置与接下来的一块石头的距离大于l的情况了。模拟:上帝开始放石头,要让青蛙一定是这次跳这块石头(在上次不能跳),并且跳最近的距离。则它前一个位置 +l+1 与现在的位置 +1的最大值就是放石头的位置。但是数据范围太大,纯模拟会超时,这时就要注意到每两次放石头后跳的距离会重复,最短的距离就是 l+1,但是这儿要特殊处理一下当某一次添加石头后,它就可以直接跳到后面原有石头上了(距离不大于l)。还有就是我的代码需要特判还没有跳出来在0的时候的情况,具体可以看代码。
代码写得很麻烦
#include #include