运用NP求解 “跳跃游戏”---计蒜客
计蒜客里面有一道“跳跃游戏的问题”
给定一个非负整数数组,假定你的初始位置为数组第一个下标。
数组中的每个元素代表你在那个位置能够跳跃的最大长度。
你的目标是到达最后一个下标,并且使用最少的跳跃次数。
例如:
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求解 “跳跃游戏”---计蒜客的更多相关文章
- 计蒜客的一道题dfs
这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...
- 计蒜客 作弊揭发者(string的应用)
鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...
- 计蒜客模拟赛5 D2T1 成绩统计
又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...
- 计蒜客 等边三角形 dfs
题目: https://www.jisuanke.com/course/2291/182238 思路: 1.dfs(int a,int b,int c,int index)//a,b,c三条边的边长, ...
- 计蒜客 方程的解数 dfs
题目: https://www.jisuanke.com/course/2291/182237 思路: 来自:https://blog.csdn.net/qq_29980371/article/det ...
- 计蒜客 买书 dfs
题目: https://www.jisuanke.com/course/2291/182236 思路: 递归解决,从第一本书开始,每本书都有两种选择: //index是book里面每本书价格的下标, ...
- 计蒜客:Entertainment Box
Ada, Bertrand and Charles often argue over which TV shows to watch, and to avoid some of their fight ...
- 爬虫acm比赛成绩(多页成绩整合在一起、获取复制不了的数据)(hihocoder、计蒜客)
https://github.com/congmingyige/web-crawler_rank-of-competition-in-JiSuanKe-and-hihocoder 1. 计蒜客(获取复 ...
- 计蒜客 31436 - 提高水平 - [状压DP]
题目链接:https://nanti.jisuanke.com/t/31436 作为一名车手,为了提高自身的姿势水平,平时的练习是必不可少的.小 J 每天的训练包含 $N$ 个训练项目,他会按照某个顺 ...
随机推荐
- 字符串常量与const常量内存区(——选自陈皓的博客)
1. 一个常见的考点: char* p = "test"; 那么理利用指针p来改变字符串test的内容都是错误的非法的. 例如: p[0] = 's'; strcpy(p, &qu ...
- visual svn 搭建
详细出处参考:http://www.jb51.net/article/17365.htm 这里提示一个需要注意的地方: 在签入源代码到SVN服务器的时候: 点击Import,弹出下面的窗体(图2-2- ...
- web.py 使用 db.select 返回的数据只能遍历一次
2013-10-05 23:04:33| 1. web.py 使用 db.select 返回的数据只能遍历一次import webdb = web.database(dbn='mysql', db ...
- 学习日常笔记<day16>mysql加强
1.数据约束 1.1什么是数据约束 对用户操作表的数据进行约束 1.2 默认值 作用:当永辉对使用默认值的字段不插入值的时候,就使用默认值 注意: 1)对默认值字段插入null是可以的 2)对默认值字 ...
- MAC地址泛红攻击
一.环境 IP地址: Windows10 IP:10.13.153.55 Windows7: IP:192.168.83.130 Linux: IP:192.168.83.129 ...
- 学习swift从青铜到王者之swift属性09
1.结构体常量和类常量的存储属性 let p1 = Person1() //p1.age = 88 不允许修改 //p11.name = "yhx1" 不允许修改 var p11 ...
- SecureCRT5 中文乱码
SecureCRT5 中文乱码 secureCRT7已经不用这样设置了: 学习了:http://www.iitshare.com/securecrt-chinese-garbled-solution. ...
- Windows-安装composer
安装laravel之前必须先安装componser,点击:下载Windows安装程序 全部下一步,直到完成 目前,遇到过两个问题(国内防火墙) 还有就是Win10不支持PHP+Composer的组合, ...
- 【OpenCV新手教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26977557 作者:毛星云(浅墨) ...
- Android 使用图片异步载入框架Universal Image Loader的问题
使用的Jar包 问题: optionsm = new DisplayImageOptions.Builder() .displayer(new RoundedBitmap ...