您的位置:首页 > 其它

【计蒜客】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


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

样例输入

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: