【计蒜客】20 - 跳跃游戏二(dp)
2016-08-09 16:37
183 查看
点击打开题目
27.77%
1000ms
65536K
给定一个非负整数数组,假定你的初始位置为数组第一个下标。
数组中的每个元素代表你在那个位置能够跳跃的最大长度。
你的目标是到达最后一个下标,并且使用最少的跳跃次数。
例如:
A = [2,3,1,1,4], 到达最后一个下标的最少跳跃次数为2.(先跳跃1步,从下标0到1,然后跳跃3步,到达最后一个下标。一共两次)
格式:
第一行输入一个正整数n,接下来的一行,输入数组A
。
最后输出最少的跳跃次数。
简单的dp,从上一个能跳的点找出跳最快的点。
代码如下:
27.77%
1000ms
65536K
给定一个非负整数数组,假定你的初始位置为数组第一个下标。
数组中的每个元素代表你在那个位置能够跳跃的最大长度。
你的目标是到达最后一个下标,并且使用最少的跳跃次数。
例如:
A = [2,3,1,1,4], 到达最后一个下标的最少跳跃次数为2.(先跳跃1步,从下标0到1,然后跳跃3步,到达最后一个下标。一共两次)
格式:
第一行输入一个正整数n,接下来的一行,输入数组A
。
最后输出最少的跳跃次数。
样例输入
5 3 1 1 1 1
样例输出
2
简单的dp,从上一个能跳的点找出跳最快的点。
代码如下:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define CLR(a,b) memset(a,b,sizeof(a)) #define INF 0x3f3f3f3f #define LL long long int main() { int n; int dis[100000]; int dp[100000]; scanf ("%d",&n); for (int i = 0 ; i < n ; i++) scanf ("%d",&dis[i]); CLR(dp,INF); dp[0] = 0; for (int i = 1 ; i < n ; i++) { for (int j = 0 ; j < i ; j++) { if (dis[j] + j >= i) dp[i] = min (dp[j]+1 , dp[i]); } } printf ("%d\n",dp[n-1]); return 0; }
相关文章推荐
- 【计蒜客系列】挑战难题20:跳跃游戏二
- 【计蒜客系列】挑战难题20:跳跃游戏二
- 计蒜客 第18题:跳跃游戏
- 计蒜客 跳跃游戏(dp)
- dp---跳跃游戏
- 计蒜客-跳跃游戏二(dp)
- 计蒜客 20 跳跃游戏二
- 计蒜客【跳跃游戏二】
- luogu1057 2008普及传球游戏 dp
- 第18题:跳跃游戏
- 2017年浙工大网络同步赛 - 取数游戏2 (DP)
- luogu 1043 数字游戏(区间dp)
- 1.有一个游戏,50关,前20关是每关得分是他们关卡数,21-40关是每关20分,41-49 每关30分,50关一次性加1000分。求,输入关卡数,求得分。 2.写一个程序,要求,输入一个数,求从这个数前面15个数开始计算的和
- 有趣的算法问题12——跳跃游戏1(贪心算法)
- 【读书笔记《Android游戏编程之从零开始》】20.游戏开发基础(游戏数据存储)
- 跳跃游戏2--计蒜课
- 手把手教你写跳跃类游戏——最终版本及所有源码!
- 每天学习一点flash(35) 游戏设计笔记 (5) 跳跃算法笔记
- 计蒜客刷题之旅 之 跳跃游戏
- 美团CodeM复赛-配对游戏(DP)