求助|青蛙跳荷叶问题

问题描述: 笔试遇到的一道算法题,没有全 AC,求指点。

题目大意为,河面上有编号 1 到 N 的 N 片荷叶,青蛙目前在 1 号荷叶,目的地是跳到 N 号荷叶。它有两种跳法:1. 跳到相邻荷叶,2. 跳过相邻荷叶跳到下一片(从 1 直接跳到 3)。可以向左跳也可以向右跳。但是有一个限制是落到一片荷叶上再跳走后,这片荷叶就沉入水底,不能再跳回来了。问跳到 N 有多少种跳法。

举例:N = 4,有 4 跳法,1234,134,124,1324。
N 的范围是 1 到 1000000000 (忘记多少个零了),另外还输入一个 M,用于对结果取模,M 的上限是 1000000007。

思考方向: 这应该是一道典型的动态规划,我当时的想法是跳到 i 有三种跳法,从 i - 1 跳 1 个步长到 i,从 i - 2 跳 2 个步长到 i,或从 i - 3 先跳 2 个步长到 i - 1,再往回跳到 i - 2,再跳到 i。定义 dp[i] 是从 1 跳到 i 的跳法数,那状态转移就是:dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];

需要帮助的地方: 最后是 36% AC,有两个问题求教

  1. 状态转移有没有问题,是不是有遗漏或者重复的情况?
  2. 是不是 int 类型大数溢出了?(我用的 Java),我只在最后返回的时候 dp[N] % M,是不是应该再状态转移的时候给每个 dp[] 都 % M 才对?

谢谢!

#笔试题#
全部评论
应该是没有在计算过程中就取余,在计算中就超出int类型会数据会出错
点赞 回复 分享
发布于 2022-08-03 02:01

相关推荐

真tmd的恶心,1.面试开始先说我讲简历讲得不好,要怎样讲怎样讲,先讲背景,再讲技术,然后再讲提升多少多少,一顿说教。2.接着讲项目,我先把背景讲完,开始讲重点,面试官立即打断说讲一下重点,无语。3.接着聊到了项目的对比学习的正样本采样,说我正样本采样是错的,我解释了十几分钟,还是说我错的,我在上一家实习用这个方法能work,并经过市场的检验,并且是顶会论文的复现,再怎么不对也不可能是错的。4.面试官,说都没说面试结束就退出会议,把面试者晾在会议里面,丝毫不尊重面试者难受的点:1.一开始是讲得不好是欣然接受的,毕竟是学习。2.我按照面试官的要求,先讲背景,再讲技术。当我讲完背景再讲技术的时候(甚至已经开始蹦出了几个技术名词),凭什么打断我说讲重点,是不能听出人家重点开始了?这也能理解,每个人都有犯错,我也没放心上。3.我自己做过的项目,我了解得肯定比他多,他这样贬低我做过的项目,说我的工作是错误的,作为一个技术人员,我是完全不能接受的,因此我就和他解释,但无论怎么解释都说我错。凭什么,作为面试官自己不了解相关技术,别人用这个方式work,凭什么还认为这个方法是错的,不接受面试者的解释。4.这个无可厚非,作为面试官,不打招呼就退出会议,把面试者晾着,本身就是有问题。综上所述,我现在不觉得第一第二点也是我的问题,面试官有很大的问题,就是专门恶心人的,总结面试官说教,不尊重面试者,打击面试者,不接受好的面试者,技术一般的守旧固执分子。有这种人部门有这种人怎么发展啊。最后去查了一下,岗位关闭了。也有可能是招到人了来恶心人的,但是也很cs
牛客20646354...:招黑奴啊,算法工程师一天200?
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务