计蒜客里面有一道“跳跃游戏的问题”

给定一个非负整数数组,假定你的初始位置为数组第一个下标。

数组中的每个元素代表你在那个位置能够跳跃的最大长度。

你的目标是到达最后一个下标,并且使用最少的跳跃次数。

例如:

A = [2,3,1,1,4],到达最后一个下标的最少跳跃次数为 2。(先跳跃 1 步,从下标 0 到 1,然后跳跃 3 步,到达最后一个下标。一共两次)

输入格式

第一行输入一个正整数 n,接下来的一行,输入 n 个整数,表示数组 A。

输出格式

最后输出最少的跳跃次数。

这道题目吧,其实理解了动态规划算法的思路也就不是那么困难了。而大家都知道,动态规划问题就是说将大问题细化成小问题,而小问题的结果已经在之前的递归中被保存到数组里,也就是说大问题的求解可以直接拿小问题的结果来用。

对于这个跳跃问题,我们可以将思想分为三个部分。

第一:

int num ;
cin>>num;
int intt[];
intt[]=-;
for(int i=;i<=num;i++){
cin>>intt[i];
array[i] = ;
}

在这部分代码中,我们是定义了一个intt[]数组来保存输入的num个数,并且array[i]的作用就是用来保存跳到intt[i] 这个数的最优解。在开始的时候,我们复制给array[i]一个很大的数(给定一个大的初值,之后如果有小的数就直接覆盖掉)。

之后就是算法的思想所在:

array[] = ;
for(int j =;j<=num;j++){
for (int n =;n<=intt[j]&&n+j<=num;n++){
array[n+j] = min(array[n+j],array[j]+);
}
}

在这部分代码中,我们给array[1]赋值为0是因为第一个数本来就不用跳跃,所以理所当然是0。在循环结构中,我们需要做num次循环(num是我们输入的数的个数,因为程序中array也就需要num个值,所以num次循环足够了)。我定义的变量均是从1开始,这样方便我们理解。当j为1的时候,也就意味着我们此时得到了第一个数的值(例如我们的例子中的第一个数为“2”,所以我n的循环次数就是从1到2共两次。换句话说就是我的第一个数的领域就是2),而需要加结束循环的条件(条件为n<=intt[j],n+j<=num这个条件意思是——例:当我的j为1的时候,我的n若可以等于4,也就是说我的第一个数的领域可以到达最后一个数,所以意味着我第一步就可以达到题目要求,所以就直接跳出来了,不需要循环)。

之后array[n+j] =  min(array[n+j],array[j]+1)方程才是NP的关键,这个方程动态更新最小值。倘若n+j这个位置是第一次赋值,那么就意味着是99999与array[j]+1比较,看谁最小(肯定是后者最小的。。)

还有可能是array[n+j]已经被赋值过了(若这个位置可以被好多个领域覆盖到,就有可能array[n+j]不等于999999),这个时候就把最小的赋值过去就好。递归5次后就得到了所以位置的最优解。

之后:

cout<<array[num]<<endl;

输出最后一个位置的最优解就好。

PS:这个平台上还有一道题目是判读是否为true或false,也就是在这个程序的基础上加一句判读最后一个array[num]是否为99999,如果是证明是false,不是就为true。是不是很基础呀~~~~~~~~~~~~~~~~~~~~~~~~~~~~

要学习的还很多,还要继续努力。。。。。。。  

————————————————————Made By Pinging~!

运用NP求解 “跳跃游戏”---计蒜客的更多相关文章

  1. 计蒜客的一道题dfs

    这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...

  2. 计蒜客 作弊揭发者(string的应用)

    鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...

  3. 计蒜客模拟赛5 D2T1 成绩统计

    又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...

  4. 计蒜客 等边三角形 dfs

    题目: https://www.jisuanke.com/course/2291/182238 思路: 1.dfs(int a,int b,int c,int index)//a,b,c三条边的边长, ...

  5. 计蒜客 方程的解数 dfs

    题目: https://www.jisuanke.com/course/2291/182237 思路: 来自:https://blog.csdn.net/qq_29980371/article/det ...

  6. 计蒜客 买书 dfs

    题目: https://www.jisuanke.com/course/2291/182236 思路: 递归解决,从第一本书开始,每本书都有两种选择: //index是book里面每本书价格的下标, ...

  7. 计蒜客:Entertainment Box

    Ada, Bertrand and Charles often argue over which TV shows to watch, and to avoid some of their fight ...

  8. 爬虫acm比赛成绩(多页成绩整合在一起、获取复制不了的数据)(hihocoder、计蒜客)

    https://github.com/congmingyige/web-crawler_rank-of-competition-in-JiSuanKe-and-hihocoder 1. 计蒜客(获取复 ...

  9. 计蒜客 31436 - 提高水平 - [状压DP]

    题目链接:https://nanti.jisuanke.com/t/31436 作为一名车手,为了提高自身的姿势水平,平时的练习是必不可少的.小 J 每天的训练包含 $N$ 个训练项目,他会按照某个顺 ...

随机推荐

  1. MySQLWorkbench里的稀奇事之timestamp的非空默认值

    在创建表时,某字段为非空时间戳,timestamp not null 问题来了,使用workbench建表时,如果值非空,是需要有一个默认值的,不然会报错. 那么,如果是更新时自动填充可以使用DEFA ...

  2. grails的criteria和hql查询

    grails在查询方面也保留了hibernate的hql和criteria查询功能.hql自然不必多说基本不会有什么变化,grails的criteria查询在hibernate上面做了微调使用起来更加 ...

  3. centos No module named setuptools解决方案

    wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz tar zxvf setuptool ...

  4. Hadoop-异常-Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/avro/io/DatumReader

    //maven org.apache.avr 下载不完全 ,去maven   If you are using maven to build your jar, you need to add the ...

  5. 从JVM的角度看JAVA代码--代码优化

    从JVM的角度看JAVA代码–代码优化 从JVM的角度看JAVA代码代码优化 片段一反复计算 片段二反复比較 在JVM载入优化为class文件,运行class文件时,会有JIT(Just-In-Tim ...

  6. Deepin-安装和卸载软件

    一般默认厂商源安装软件 安装软件: 示例:sudo apt-get install xx 实例:sudo apt-get install nodejs 卸载软件: 示例:sudo apt-get -- ...

  7. var和dynamic的应用 var、动态类型 dynamic 深入浅析C#中的var和dynamic ----demo

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. 实践部署与使用apache kafka框架技术博文资料汇总

    前一篇Kafka框架设计来自英文原文(Kafka Architecture Design)的翻译及整理文章,非常有借鉴性,本文是从一个企业使用Kafka框架的角度来记录及整理的Kafka框架的技术资料 ...

  9. java 报错非法的前向引用

    今天在看<thinking in java>的时候,第四章提到了非法的前向引用,于是自己试了一下,书中的例子倒是一下就明白了,但是自己写的一个却怎么也不明白,于是上网问了一位前辈,终于明白 ...

  10. 【HDOJ 3652】B-number

    [HDOJ 3652]B-number 给一整数n 找<=n的整数中能被13整除且含有13的 数位dp 记忆化! . 一入记忆化深似海. ..再也不想用递推了...发现真的非常好想 仅仅要保证满 ...