题目描述

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

输入描述:

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

输出描述:

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

示例1

输入

5
2 0 1 1 1

输出

4

这是第一遍做出的结果,很快就做出来了,本以为没什么难度,但是发现case只过了20%。。。重新读题后才发现袋鼠是 最多 跳几下,不是一定跳几下。。以下是我第一遍的代码。

#include<iostream>
using namespace std;
int main(void){int n=0;int cn=0;cin>>n;cn=n;int temp;int a[100];int i=0;while(n--){cin>>temp;a[i]=temp;i++;}int sum=0;int num=0;int index=0;while(index<cn){sum+=1;num=a[index];if(num==0) break;index+=num;}cout<<sum;return 0;
}

理解了题意后再来做题。

其实是动态规划问题,和求最大递增序列差不多,每次遍历前面的数看是否能够到达当前位置,遇到0则跳过。

#include<iostream>
#include<vector>
using namespace std;
int GetCount(vector<int>& num)
{int n = num.size();vector<int> dp(n + 1, 10000);dp[0] = 1;for (int i = 1; i <= n; i++){for (int j = i - 1; j >= 0; j--){if (num[j] == 0)continue;if (j + num[j] >= i)  //dp[i]表示到达i位置时的最少步数,而dp[i]又和i前面的位置有关,如果j+num[j]>=i,说明j位置能到达i位置,就更新dp[i],保存达到i的最少步数dp[i] = min(dp[i], dp[j] + 1); //j位置再跳一次到i}}if (dp[n] == 10000)return -1;elsereturn dp[n] - 1;
}int main()
{int N = 0;cin >> N;vector<int> num(N,0);for (int i = 0; i < N; i++)cin >> num[i];cout << GetCount(num) << endl;return 0;
}

OK啦!

c++编程题 袋鼠过河相关推荐

  1. 搜狐[编程题] 袋鼠过河.一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个

    时间限制:1秒 空间限制:32768K 一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远.每个弹簧力量不同,用一个数 ...

  2. 算法-经典趣题-青蛙过河

    本文为joshua317原创文章,转载请注明:转载自joshua317博客 算法-经典趣题-青蛙过河 - joshua317的博客 一.问题 青蛙过河是一个非常有趣的智力游戏,其大意如下: 一条河之间 ...

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

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

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

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

  5. 字节跳动2019春招第二次笔试编程题

    字节跳动2019春招第二次笔试编程题 1.变身程序员 题目描述 输入描述 输出描述 示例 示例1 示例2 示例3 分析 参考代码 2.特征提取 题目描述 输入描述 输出描述 示例 示例1 备注 分析 ...

  6. [JS] [编程题] 配置文件恢复

    [编程题]配置文件恢复 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M 链接:https://www.nowcoder.com/questionTerminal/ ...

  7. Linux编程题:信号量同步三进程依次打印若干次ABC

    三个进程依次打印ABC..... 思路及大致流程如下: 思路取自这位大哥: Linux编程题:创建3个线程分别打印abc,用信号量进行同步_cleverlemon的博客-CSDN博客 这位大哥写的是线 ...

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

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

  9. c语言编程题餐饮服务打分,求详细分析C语言题餐饮服务质量调查打分题和答案..._质量员考试_帮考网...

    bangsaizhuo 新兵答主 11-09 TA获得超过6761个赞 二.填空题 1. ___变量__是指在程序运行过程中,值可以发生变化的量. 2.C语言是一种____区分_(区分/不区分)字母大 ...

最新文章

  1. 记录智能指针使用shared_ptr使用错误
  2. Linux中shell命令的用法和技巧
  3. 建站初期关键字的定位
  4. 五轮阿里面试题及答案
  5. SAP转储订单(STO)
  6. Dubbo-go v3.0 正式发布 ——打造国内一流开源 Go 服务框架
  7. android实战开发02
  8. java 查找引用_java – Eclipse查找方法的引用
  9. 1180魔方阵(每日学习)宁波大学OJ
  10. 吴彦祖计算机系统班 百度网盘,哪位吴彦祖(来自伸手党的夸赞) 有老詹的那场g6的百度云盘录像啊?我很需要...
  11. http抓包实践--(七)-fiddler弱网环境
  12. mybatis插件破解
  13. GCT 英语单词全部核心词汇A-Z
  14. Python中函数的括号
  15. Java并发相关知识(多线程、锁、容器、工具)
  16. 文件在服务器中存储,如何发送音频文件在服务器中存储
  17. 【flutter】type ‘Null‘ is not a subtype of type ‘bool‘
  18. 判断用户使用的浏览器是不是IE8
  19. 2022年湖南省中医执业医师考试第二单元中医诊断学(一)
  20. qt服务器项目总结报告,ea项目总结报告-20210805131110.docx-原创力文档

热门文章

  1. python是不是很简单_Python老师说Python是编程里最简单的还是两眼一抹黑咋办?
  2. python抢购茅台抢购描述
  3. 【图像处理 -1图像恢复】非线性过滤器修复图像
  4. 七天毁灭地球的十种方法
  5. 关于C++ variant 类型问题
  6. 解决Ubuntu18.04下VMware开启虚拟网络编辑器无反应
  7. STM32F1串口最高波特率问题
  8. 06- 移动端APP兼容性测试以及APP兼容性测试手机选择与云测试技术
  9. java毕业生设计房屋租赁平台计算机源码+系统+mysql+调试部署+lw
  10. leetcode账号手机号换绑