// 方法一:保存布尔型dp数组表示该格子能否到达 import java.util.Scanner; public class Main{ public static void main(String[] args){ int n; Scanner sc = new Scanner(System.in); n = sc.nextInt(); int[] a = new int[n]; for (int i = 0; i < n; i++) { a[i] = sc.nextInt(); } boolean[] dp = new boolean[n]; dp[0] = true; for (int i = 0; i < n; i++) { if (dp[i]) { for (int j = i + 1; (j <= i + a[i]) && j < n; j++) { dp[j] = true; } } else { break; } } System.out.println(dp[n - 1]); } }
// 方法二:保存dp记录能到达的最大距离 import java.util.Scanner; public class Main{ public static void main(String[] args){ int n; Scanner sc = new Scanner(System.in); n = sc.nextInt(); int[] a = new int[n]; for (int i = 0; i < n; i++) { a[i] = sc.nextInt(); } int dp = a[0]; for (int i = 1; i < n && i <= dp; i++) { dp = Math.max(dp, a[i] + i); } System.out.println(dp >= n-1); } }