运用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$ 个训练项目,他会按照某个顺 ...
随机推荐
- POJ 1753 Flip Game【枚举】
题目链接: http://poj.org/problem?id=1753 题意: 由白块黑块组成的4*4方格,每次换一个块的颜色,其上下左右的块也会被换成相反的颜色.问最少换多少块,使得最终方格变为全 ...
- 洛谷—— P1186 玛丽卡
https://www.luogu.org/problem/show?pid=1186 题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长 ...
- 核函数以及SVM相关知识(重点)
http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988406.html http://blog.pluskid.org/?p=685 考虑我们 ...
- 转: 将Eclipse代码导入到AndroidStudio的两种方式
评注: 讲解的非常之详细 转自: http://www.cnblogs.com/ct2011/p/4183553.html 说到使用AndroidStudio,除了新建的项目,我们都会面临的问题 ...
- 深入浅出Redis(二)高级特性:事务
第一篇中介绍了Redis是一个强大的键-值仓储,支持五种灵活的数据结构.其实,Redis还支持其他的一些高级特性:事务.公布与订阅.管道.脚本等,本篇我们来看一下事务. 前一篇中我们提到,在Redis ...
- 【机器学习具体解释】SVM解二分类,多分类,及后验概率输出
转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51073885 CSDN−勿在浮沙筑高台 支持向量机(Support Vecto ...
- C语言 字符串操作 笔记
/* C语言字符串的操作笔记 使用代码和注释结合方式记录 */ # include <stdio.h> # include <string.h> int main(void) ...
- IOS 字典模型互转框架 MJExtension
IOS 字典模型互转框架 MJExtension 能做什么? MJExtension是一套字典和模型之间互相转换的超轻量级框架 MJExtension能完成的功能 字典(JSON) --> ...
- 十分简洁的手机浏览器 lydiabox
没有地址栏,没有工具栏.web app无需下载.无需安装.无需更新,加入即用:再也不用记住网址.更不用输入网址--一款这样极简极方便的浏览器,你想要吗? 我们做了一个十分简洁的手机浏览器,这个浏览器也 ...
- Android之——监听手机开机事件
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47028535 本文中,主要通过监听开机广播来达到监听手机开机状态的操作.在Andr ...