该题用动态规划法求解的核心思想是由终点向起点回推(如果由起点向终点的话,笔者才疏学浅,只想到了穷举一种方法),条件为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; }