import java.util.*; public class Main { public static void main(String[] args) { // 标准输入 Scanner input = new Scanner(System.in); // 获取数组长度 int len = input.nextInt(); // 获取输入数组 int[] nums = new int[len]; for (int i = 0; i < len; i++) { nums[i] = input.nextInt(); } // 调用动态规划函数 boolean res = dp(nums); // 输出结果 System.out.println(res); } // 动态规划函数 private static boolean dp(int[] nums) { // 预处理 if (nums.length == 1) return true; // 初始化 int len = nums.length; int furthest = 0; // 遍历数组,动态更新最远距离 for (int i = 0; i < len-1; i++) { if (i <= furthest) { // 尚未越界 // 状态转移 furthest = Math.max(furthest, i + nums[i]); if (furthest >= len-1) { // 能到达数组最后一位 return true; } } } // 遍历结束尚未返回,则不能到达数组末 return false; } }