跳跃游戏

来源:互联网 发布:mac软件怎么关闭 编辑:程序博客网 时间:2024/06/05 20:54

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

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

请确认你是否能够跳跃到数组的最后一个下标。

例如:A = [2,3,1,1,4]A=[2,3,1,1,4] 能够跳跃到最后一个下标,输出true;

A = [3,2,1,0,4]A=[3,2,1,0,4] 不能跳跃到最后一个下标,输出false。

输入格式

第一行输入一个正整数 n(1 \leq n \leq 500)n(1≤n≤500),接下来的一行 nn 个整数,输入数组 A_iA
​i
​​ 。

输出格式

如果能跳到最后一个下标,输出true,否则输出false。

样例输入

5
2 0 2 0 1
样例输出

true

勉强算是动态规划吧,

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include <bits/stl_algobase.h>using namespace std;const int mmax = 610;int max_next[mmax];int dp[mmax];int main() {    int n;    scanf("%d", &n);    memset(dp, 0, sizeof(dp));    for (int i = 0; i < n; ++i) {        scanf("%d", &max_next[i]);    }    dp[0] = 1;    for (int i = 0; i < n; ++i) {        for (int j = 1; j <= max_next[i]; ++j) {            dp[i+j ] = dp[i];        }    }    if(dp[n-1]==0)    printf("false");    else    printf("true");    return 0;}