跳木桩。
从0开始跳。
跳出范围的最小跳跃次数。
l = list(map(int,input()[1:-1].split(',')))
n = len(l)
dp = [100000]*(n+1) #dp长度为n+1,dp[n]是最后一个结点,表示成功时最小的跳跃次数。
dp[0] = 0
for k in range(n):
i = k
# 为什么是while而不是if? 答:不能只用一次更新的结点,而是要用一组跳跃(从i位置,一直往后跳)。这组跳跃表示经过i木桩的情况。
# ! !!每次循环都只遍历经过k木桩连续跳跃的情况, 每次连续跳跃都可以更新跳跃位置前的结点。!!!。如果是if会缺少更新。
# 如果是if ,则[2,5,1,1,1,1] 最后dp结果就为5。(正确为3)。
while i<n:
# 从k开始,连续跳跃到第i个木桩。
## 更新后面结点。
if i+l[i] >= n:
dp[n] = min(dp[n],dp[i]+1)
else:
dp[i+l[i]] = min(dp[i+l[i]],dp[i] + 1) #两种写法都可以。