题目描述

一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远。每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为5,就代表袋鼠下一跳最多能够跳5米,如果为0,就会陷进去无法继续跳跃。河流一共N米宽,袋鼠初始位置就在第一个弹簧上面,要跳到最后一个弹簧之后就算过河了,给定每个弹簧的力量,求袋鼠最少需要多少跳能够到达对岸。如果无法到达输出-1

输入描述:

输入分两行,第一行是数组长度N (1 ≤ N ≤ 10000),第二行是每一项的值,用空格分隔。

输出描述:

输出最少的跳数,无法到达输出-1
示例1

输入

5
2 0 1 1 1

输出

4
 1 import java.util.ArrayList;
 2 import java.util.List;
 3 import java.util.Scanner;
 4 /**
 5  *
 6  * 袋鼠过河(最多跳弹簧的步数) 用 list 来模拟dp数组 list存每一行,横坐标为 各个弹簧的到达情况 未到达为0 到达为1 到达此处陷入为0
 7  *
 8  * @author Dell
 9  *
10  */
11 public class Main {
12     static List<int[]> dp = new ArrayList();
13     static int n;
14     static int[] is;
15
16     static int f() {
17         // 站在第一个弹簧上时
18         int step = 0;
19         int x = 0;
20         int[] s = new int[n + 1];
21         for (int j = 0; j < s.length; j++) {
22             s[j] = 0;
23         }
24         s[0] = 1;
25         dp.add(s);
26         while (step <= n) {// 所有行
27             int[] ss = new int[n + 1];// 多出来的最后一位表示岸上
28             for (int j = 0; j < ss.length; j++) {
29                 ss[j] = 0;
30             }
31             // 每一行 根据本行填写下一行
32             for (int i = step; i < ss.length; i++) {// 多出来的最后一位表示岸上
33                 // 位置 i已到达
34                 if (dp.get(dp.size() - 1)[i] == 1) {
35                     // 走不同的步数
36                     for (int j = 1; j <= is[i]; j++) {
37                         // 判断不可超出弹簧范围一个一,下标要多减,若超出则选岸上为1
38                         if (i + j <= ss.length-2) {
39                             // 在范围内 新位置 不是0 不会陷 访问
40                             if (is[i + j] > 0) {
41                                 ss[i + j] = 1;
42                             }
43                         } else {
44                             // 超出则选最后一个为1
45                             ss[ss.length - 1] = 1;
46                         }
47                 }
48                 }
49             }
50             dp.add(ss);
51
52             step++;
53             if (dp.get(dp.size()-1)[ss.length - 1] == 1) {// 岸上访问到
54                 return step;
55             }
56         }
57         return -1;
58     }
59     public static void main(String[] args) {
60         Scanner sc = new Scanner(System.in);
61         n = sc.nextInt();
62         is = new int[n];
63         for (int i = 0; i < is.length; i++) {
64             is[i] = sc.nextInt();
65         }
66         int res = f();
67         System.out.println(res);
68     }
69 }

转载于:https://www.cnblogs.com/the-wang/p/8981592.html

袋鼠过河(动态规划)相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 袋鼠过河问题(Java)

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

  7. 袋鼠过河python

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

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

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

  9. 袋鼠过河问题(DP)

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

最新文章

  1. myeclipse 修改模板
  2. mysql打印语句_最全总结 | 聊聊 Python 数据处理全家桶(Mysql 篇)
  3. document.ready和onload的区别——JavaScript文档加载完成事件
  4. C# 定义了 7 种变量类别:静态变量、实例变量、数组元素、值参数、引用参数、输出参数和局部变量
  5. 19岁「黑客」连续破解25辆特斯拉
  6. linux内存管理(八)-不连续页分配和页表
  7. 谷歌AI相机Clips今发售,“贴身摄影师”抓拍每一刻欢乐
  8. oracle登录卡,【Oracle连接问题】关于windows xp3上oracle连接登录卡住的问题
  9. 瀑布模型,快速原型模型,增量模型,螺旋模型以及敏捷开发模型的相关概念
  10. PHP强大自适应OA协同办公系统源码 含CRM客户管理系统+内部聊天工具
  11. Python文件操作及函数
  12. 一点感悟: 詹姆斯与全栈工程师
  13. 学习报告:基于原型网络的小样本学习《Prototypical Networks for Few-shot Learning》
  14. 夜深人静写算法(九)- Dancing Links X(跳舞链)
  15. mysql pdo 端口_pdo连接mysql
  16. Android UI
  17. pandas 中上下两行相减(隔行相减) -- shift函数的使用
  18. 2019 秦皇岛CCPC赛后总结
  19. html指定区域的背景颜色,JS实现点击颜色块切换指定区域背景颜色的方法
  20. Android Audio 音频路由

热门文章

  1. LeetCode 笔记系列 18 Maximal Rectangle [学以致用](最大矩形)
  2. php限制字符输入,.NET_asp.net(c#)限制用户输入规定的字符和数字的代码,一下是这个代码: 只允许 用 - phpStudy...
  3. sql server 2008连接oracle操作步骤详细记录,SQLServer连接Oracle详细步骤
  4. java中json重复数据结构_JS实现去除数组中重复json的方法示例
  5. python海龟画笔如何运行_Python海龟绘图:turtle的简单使用
  6. win2008怎么配置php,Win2008 PHP 配置环境搭建 教程
  7. linux 浏览器源码下载,Android开发:图片浏览器源码
  8. data es集群master_Kubernetes Helm3 部署 ElasticSearch amp; Kibana 7 集群
  9. 河南城建学院计算机分数,河南城建学院录取分数线2021是多少分(附历年录取分数线)...
  10. 谁说C语言和C+太难?没前途?谬论!