袋鼠过河
来源:互联网 发布:js多文件上传 编辑:程序博客网 时间:2024/05/01 08:29
题目描述
一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远。每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为5,就代表袋鼠下一跳最多能够跳5米,如果为0,就会陷进去无法继续跳跃。河流一共N米宽,袋鼠初始位置就在第一个弹簧上面,要跳到最后一个弹簧之后就算过河了,给定每个弹簧的力量,求袋鼠最少需要多少跳能够到达对岸。如果无法到达输出-1
输入描述:
输入分两行,第一行是数组长度N (1 ≤ N ≤ 10000),第二行是每一项的值,用空格分隔。
输出描述:
输出最少的跳数,无法到达输出-1
示例1
输入
52 0 1 1 1
输出
4
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextInt()) {//注意while处理多个case int a = in.nextInt(); int[] stump = new int[a]; //树桩的所有弹力 for(int i = 0; i < a; i++){ stump[i] = in.nextInt(); } //定义一个数组用来记录每到第几米所需要的最少条次数,因为包含0米,而河的宽度是a要跳到第a米,所以需要数组长度为a+1 int[] dp = new int[a+1]; dp[0] = 0;//跳到第0米只需要跳0次 //初始化最小跳次数数组,因为还没哟开始跳,可以设初始值很大 for(int i = 1; i < dp.length; i++){ dp[i] = 100001; } //依次计算跳到第几米所需要的最小跳的次数,从第1米的树桩开始,到第a米结束 for(int i = 1; i <= a; i++){ //关键在于如何统计出跳到当前米所需要的最小次数 //思路:遍历前边所有这样的节点:跳一次就能跳到当前米的节点,因为前一个树桩的最小跳次数已经确定,所以就可以筛选出跳到 //当前树桩最小跳次数 //为什么只要遍历跳一次到当前树桩,而不是2次呢?因为要到当前树桩,肯定是最后一跳到这里,所以只要统计数能够最后一跳到这里的树桩 //就可以了 for(int j = i-1; j >= 0; j--){//遍历前面所有树桩,找到能够一跳就能到当前树桩i的树桩位置j if(stump[j] == 0) continue;//树桩没有用 if(j+stump[j] >= i) dp[i] = Math.min(dp[i], dp[j]+1);//位置j米+弹力stump[j]能够到当前树桩第i米,找到了位置,就更新 //跳到第i米最少条d[i] } } //统计完所有树桩的最小跳次数,答案就出来了 if(dp[a] == 100001) System.out.println(-1); else System.out.println(dp[a]); } } }
阅读全文
0 0
- 袋鼠过河
- 袋鼠过河
- 袋鼠过河问题
- 袋鼠过河问题(DP)
- 搜狐笔试题目一袋鼠过河
- 动态规划之袋鼠过河问题
- 利用贪心算法计算袋鼠过河问题
- 搜狐2017秋招研发工程师笔试 —— 袋鼠过河(贪心、动态规划、转为图)
- 搜狐[编程题] 袋鼠过河.一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个
- 过河
- 过河
- 过河
- 过河
- 过河
- 过河
- 过河
- 过河
- 过河
- iOS流媒体直播框架简介
- php 多线程并发处理
- 微信小程序开发(入坑之旅)一:域名问题。
- OpenCV中phase函数计算方向场
- 《AppIntent
- 袋鼠过河
- JAXB实现JavaBean与XML互相转换
- 一段简单代码理解异步请求消息队列在高并发环境中的作用
- Android开发,自定义ViewGroup的神器,ViewDragHelper
- WebService到底是什么?
- 排序&&单链表反转
- seajs学习
- 记录Qt+VS开发过程中遇到的问题
- c语言之链表学习小结