运用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 ...
- Perforce share workspace between linux and windows
p4 workspace 跨平台共享 (linux 和 window 共享) 用来存放代码的目录: linux存放代码目录: /home/username/ windows 上map network ...
- BZOJ 1123 tarjan
题目链接 题意:一张无向图,把第$i$个点关联的所有边去掉,求无向图中有多少个点对不连通. 题解: 如果割的不是割点,那么总答案是$2\times (n-1)$. 如果是割点,要分别考虑每个子树的贡献 ...
- BZOJ——2697: 特技飞行
http://www.lydsy.com/JudgeOnline/problem.php?id=2697 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: ...
- Linux驱动开发:USB驱动之usb_skel分析
在学习了这么些天的驱动之后,个人觉得驱动就是个架构的问题,只要把架构弄清楚了 然后往里面添砖加瓦就可以了,所以似乎看起来不是太困难,但也许是是我经验不足吧,这只能算是个人浅见了 这两天在学习USB驱动 ...
- org.hibernate.AnnotationException: No identifier specified for entity:
使用hibernate的e-r映射pojo类的时候遇到org.hibernate.AnnotationException: No identifier specified for entity的异常, ...
- [RxJS] `add` Inner Subscriptions to Outer Subscribers to `unsubscribe` in RxJS
When subscribers create new "inner" sources and subscriptions, you run the risk of losing ...
- B+树在NTFS文件系统中的应用
B+树在NTFS文件系统中的应用 flyfish 2015-7-6 卷(volume) NTFS的结构首先从卷開始. 卷相应于磁盘上的一个逻辑分区,当你将一个磁盘或者磁盘的一部分格式化成NTFS,卷将 ...
- Python中的列表,元组,字符串之间的相互转化
Python中的列表元组和字符串之间的相互转化需要利用,tuple(),list(),str(). 示例如下: >>> the_string = "hello I'am x ...
- Ubuntu14.04常用安装
sudo apt-get update sudo apt-get install flashplugin-nonfree ================= 类飞秋软件 sudo apt-get in ...