public boolean canJump_lint2(int[] A) {
        if (A == null || A.length == 0 || A[0] == 0)
            return false;
        boolean[] dp = new boolean[A.length];
        int reach = A[0];
        dp[0] = true;
        for (int i = 1; i < A.length && reach > 0; ++i) {
            if (dp[i - 1] == true && A[i - 1] + reach >= i)
                dp[i] = true;
            --reach;
            reach = Math.max(A[i] + i, reach);
        }
        return dp[A.length - 1];
    }