首先应当指出,这道题的问题描述不清晰。描述中说到:河中间打了很多桩子,每隔一米就有一个,河流一共n米宽,袋鼠初始在第一个弹簧上面,若跳到最后一个弹簧就算过河了。 结合题目中给出的样例,疑点有以下两个:

(1)n米宽的河,每隔一米打一个桩,为什么一共打了n个桩,是起点没打桩还是终点没打桩?

(2)分析输入样例,容易知道满足最少跳数的路线是这样的:2--->第一个1--->第二个1--->最后一个1。得到最少跳数为3,与样例输出的4不符。


抛开这些疑点不谈,这道题目中的DP思想还是值得去探讨研究的。

思路:用dp[i]代表到达i位置时的最小步数,而dp[i]又和前面的位置有关,如果j+a[j]>=i,就说明j位置能到达i位置,就更新dp[i],保存到达的最小步数

对问题进行抽象之后,得到递推方程如下(其中dp数组存储了袋鼠跳跃的最小步数,初值为0):

dp[i]=min(dp[i],dp[j]+1);

Java源代码如下:

import java.util.*;public class Main  {public static void main(String[] args) {Scanner in=new Scanner(System.in);int n=in.nextInt();int[] a=new int[n+1],dp=new int[n+1];//a[i]表示第i个桩的弹簧力量,dp[i]表示到第i个桩的最小跳数for(int i=1;i<=n;i++){a[i]=in.nextInt();}for(int i=2;i<=n;i++)dp[i]=10000;//初始值为最大跳数for(int i=2;i<=n;i++){for(int j=1;j<i;j++){if(j+a[j]>=i){//如果从第j个桩能一下子跳到第i个桩dp[i]=Math.min(dp[i],dp[j]+1);//更新dp}}}System.out.println(dp[n]==10000?-1:dp[n]+1);//这样写是为了贴合样例,正确的写法应当是System.out.println(dp[n]==10000?-1:dp[n]+1);}
}

袋鼠过河问题(DP)相关推荐

  1. 求解袋鼠过河问题(dp)

    问题描述:一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上有一个弹簧,袋鼠跳到弹簧上就可以跳的更远.每个弹簧力量不同,用一个数字代表它的力量,如果弹簧的力量为 ...

  2. 袋鼠过河(动态规划)

    题目描述 一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远.每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为 ...

  3. 头歌-EduCoder:袋鼠过河问题

    头歌-EduCoder:袋鼠过河问题 任务描述 题目描述 编程要求 测试说明 代码实现 任务描述 本关任务:编写一个袋鼠过河问题的小程序. 题目描述 一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打 ...

  4. educoder算法设计与分析 实验一扩展 袋鼠过河问题

    实验五 回溯法扩展1 第1关:袋鼠过河问题 第1关:袋鼠过河问题 题目描述: 一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩,每隔一米就有一个,每个桩上面有一个弹簧,袋鼠跳到弹簧上就可以跳 ...

  5. 【算法】袋鼠过河,动态规划问题(C++源码)

    [算法]袋鼠过河,动态规划问题(C++源码) 一.问题描述 二.输入描述 三. 输出描述 四.输入样例 五.输出样例 六.步骤描述 七.运行结果截图 八.源代码(C++) 一.问题描述 一只袋鼠要从河 ...

  6. 动态规划之袋鼠过河问题

    题目:一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远,每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为5, ...

  7. 袋鼠过河python

    2019独角兽企业重金招聘Python工程师标准>>> 一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧, 袋鼠跳到弹簧上就可以 ...

  8. c++编程题 袋鼠过河

    题目描述 一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远.每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为 ...

  9. c语言打袋鼠游戏,搜狐 袋鼠过河 动态规划

    题目描述 一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远.每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为 ...

最新文章

  1. 电脑显示没有被指定在上运行_win10系统运行程序提示“dll没有被指定在windows上运行”的办法...
  2. linux系统退出当前计算节点命令,Linux下60个系统命令详细解.doc
  3. Intel Developer Forum 2010英特尔信息技术峰会第二天小记
  4. ACL 2018 收录论文 | 如何高效提炼有效信息?
  5. 给Visual Studio Code的文件夹和文件替换图标
  6. android单选按钮空值,Android的 - 空指针异常的对话与单选按钮
  7. Servlet--ServletInputStream类,ServletOutputStream类
  8. linux虚拟用户登录失败,用shell用户或虚拟用户登录pureftpd
  9. 基姆拉尔森公式--判断星期几
  10. 大专php应用开发期末考试,php程序员笔试题及答案1.doc
  11. 30个值得推荐的数据可视化工具(2022年最新)
  12. CUDA编程之矩阵乘法
  13. html实现圆形图片
  14. Linux 操作系统的体系结构
  15. 加拿大康考迪亚计算机工程,加拿大康考迪亚
  16. java graphics2d 乱码_Graphics2D 中文乱码
  17. 小程序连接优声云打印机流程
  18. 【Benewake(北醒) 】中距 TF02-i 40m工业版本CAN/485介绍以及资料整理
  19. python敏感词过滤代码简单代码_Python 实现王者荣耀中的敏感词过滤示例
  20. [project X] tiny210(s5pv210)上电启动流程(BL0-BL2)

热门文章

  1. 图像处理之LSB Matching Revisited论文复现
  2. 没有金三银四,又要迎接所谓的金九银十,今年大环境这么差,Java岗必备面试题及答案学习还是得学
  3. Ubuntu系统下创建本地源
  4. 2021年软考建议什么时候报名?什么时候考试?
  5. UiAutomator Android 的自动测试框架(基础)
  6. stmdb和ldmia
  7. 初创游戏企划草案经验谈
  8. 云手机互联网点评系列-华为云手机云服务cloud+初评
  9. DOM对象之事件对象(Object《Event》)
  10. 2019阿里暑期实习一面