跳跃游戏

给定一个非负整数数组,假定你的初始位置为数组第一个下标。

数组中的每个元素代表你在那个位置能够跳跃的最大长度。

你的目标是到达最后一个下标,并且使用最少的跳跃次数。

例如:

A = [2,3,1,1,4], 到达最后一个下标的最少跳跃次数为2.(先跳跃1步,从下标0到1,然后跳跃3步,到达最后一个下标。一共两次)

格式:

第一行输入一个正整数n,接下来的一行,输入数组A[n]。

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

样例1

输入:

5
3 1 1 1 1

输出:

2

思路:dp[i]代表跳跃到第i个数最少的步数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a[1000],dp[1000];
    cin>>n;
    for(int i=0;i<n;++i)
    {
        cin>>a[i];
    }
    const int inf=0x7fffffff;
    fill(dp,dp+n,inf);
    dp[0]=0;
    for(int i=0;i<n-1;++i)
    {
        for(int j=1;j<=a[i];++j)
        {
            dp[i+j]=min(dp[i]+1,dp[i+j]);
        }
    }
    cout<<dp[n-1]<<endl;
    return 0;
}

打个小广告

欢迎加入我的小专栏「基你太美」一起学习。