一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧, 袋鼠跳到弹簧上就可以跳的更远。每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为5,就代表袋鼠下一跳最多能够跳5米, 如果为0,就会陷进去无法继续跳跃。河流一共N米宽,袋鼠初始位置就在第一个弹簧上面,要跳到最后一个弹簧之后就算过河了, 给定每个弹簧的力量,求袋鼠最少需要多少跳能够到达对岸。如果无法到达输出-1 输入描述: 输入分两行,第一行是数组长度N (1 ≤ N ≤ 10000),第二行是每一项的值,用空格分隔。 输出描述: 输出最少的跳数,无法到达输出-1 示例1 输入 5 2 0 1 1 1 输出 4
#递归方法
lens=int(input())
lists=list(map(int,input().split()))
ind_get={}
for i in range(1,lens+1):
ind_get[i]=list(range(i+1,i+lists[i-1]+1))
def get_min(ind_get,ind):
get_list=[]
if ind==1:
return 1
for k, v in ind_get.items():
if k < ind and ind in v:
get_list.append(get_min(ind_get, k))
min_num=min(get_list)
return min_num+1
res=get_min(ind_get,lens)
print(res)
#动态规划
lens=int(input())
lists=list(map(int,input().split()))
dp=[i for i in range(lens+1)]
for i in range(lens+1):
if i ==0:
continue
flag=False
for j in range(i):
if j+lists[j] >= i:
dp[i]=min(dp[i],dp[j]+1)
flag=True
if flag==False:
break
if flag==True:
print(dp[lens])
else:
print("-1")