牛牛的跳跳棋 牛客noip集训第一场B

竞赛传送门
来源:牛客网
比赛时
我用了100多行暴力深搜,可能脑子抽了,之后补题懂了。
在此感谢@SSL_TJH
贪心在这对应的算法就是

那这道题就可以很愉快的用贪心解决了,在用魔法之前竟可能的走到更前面,然后在跳最后一次的地方用一次魔法。 这时候可能会有人问:为什么这样一定可以呢?
因为它无论在什么地方使用魔法,都只能在原来的基础上多走一步,那肯定就是先找到能走到最远地方的最后一点,然后再那个地方用魔法。 然后我们只要在走的时候记录一下在那些地方用了魔法,在到终点之后输出出来就可以了。

一开始我在想,有可能直接maxn>n,那i岂不是到不了maxn?
但应该是这样,在i+a[i]>n之后,里面的if语句已经把maxn>n的情况直接输出了,所以排除了这种可能

else if (i == maxn) {//已经尽可能的走的更远了,一定要用魔法
            num[++num[0]] = maxx;
            maxn++;
            maxx = maxn;

            if (maxn > n) write();//用完魔法就到终点了
        }

这里我的理解就是,用的是num[0]来记录用魔法的次数,之后的num[i]记录用魔法的地方每一次用魔法的地方在maxx,用魔法之后能走多一格,所以maxn++,如果没走到终点,还要再用魔法,所以要记录下来下一次用魔法的地方,也就是现在的maxn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值