袋鼠过河python

一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧, 袋鼠跳到弹簧上就可以跳的更远。每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为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")

猜你喜欢

转载自my.oschina.net/u/3726752/blog/1790590
今日推荐