开发者社区> 问答> 正文

遇到一个动态规划的问题,求解答。

给出一个长度为 n的数组 a,数组中的值a[i]表示你在第i 个位置最多能够移动到第i+a[i]个位置,并且不能超过n。你可以选择移动到的位置包括:i,i+1,...i+a[i]。你需要确定移动到第n个位置的最小移动次数。如果无法移动到第n个位置请输出 -1。输入数组的长度 n(1<=n<=100000),和含有 n 个数字的数组 a,a[i] 表示第i个位置最多能够移动到第i+a[i]个位置(0<=a[i] <=100)。输出一个数字,表示最小的移动次数。

展开
收起
游客4skzfvnrxrzbi 2021-12-23 16:46:11 546 0
1 条回答
写回答
取消 提交回答
  • 这是一个动态规划的问题。设f(i)为到第i个位置处的最小步数。初始化f的每个位置步数都是一个足够大的值。Nums(i) 表示第 i 个位置最多能够移动的距离。对于一个位置 j 来说,它的最小步数应该是前面所有可以一步到达它这里的位置中最小的 f(i)+1。设f(1)=0。后面的状态转移是j=1-nums(i),f(i+j)=min(f(i)+1,f(i+j)) 输入:5 [2,3,1,4,5] 输出:2 注:最优路径为:1->2->5

    2021-12-23 18:36:41
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载