该题用动态规划法求解的核心思想是由终点向起点回推(如果由起点向终点的话,笔者才疏学浅,只想到了穷举一种方法),条件为j-k<=a[k],即由k点到j点的距离小于a[k]跳动的最大距离,j点为靠后的那一个点。由于数组中任意一点a[k]的值为k点能跳动的最大值,故只要从想要到达的那个点由后向前寻找满足条件的点即可,并将该点作为新的终点寻找下一个能到达终点的点。

#include <stdio.h>
int main() {
    int n,j,k;
    scanf("%d",&n);
    int a[n];
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    j=n-1;
    k=j-1;
    while(k>=0)
    {
        if(a[j]<=a[k]+j-k)
        {
            j=k;
            k=j-1;
        }
        else
        {
            k--;
        }
    }
    if(k==-1)
    {
        printf("false");
    }
    if(k==0)
    {

    }
    return 0;
}