練習題7:袋鼠過河(使用了動態規劃求解)
阿新 • • 發佈:2018-06-06
odin tdi font n+1 解法 append 動態規劃 split() 需要
題目描述
一只袋鼠要從河這邊跳到河對岸,河很寬,但是河中間打了很多樁子,每隔一米就有一個,每個樁子上都有一個彈簧,袋鼠跳到彈簧上就可以跳的更遠。每個彈簧力量不同,用一個數字代表它的力量,如果彈簧力量為5,就代表袋鼠下一跳最多能夠跳5米,如果為0,就會陷進去無法繼續跳躍。河流一共N米寬,袋鼠初始位置就在第一個彈簧上面,要跳到最後一個彈簧之後就算過河了,給定每個彈簧的力量,求袋鼠最少需要多少跳能夠到達對岸。如果無法到達輸出-1。
輸入描述:
輸入分兩行,第一行是數組長度N (1 ≤ N ≤ 10000),第二行是每一項的值,用空格分隔。
輸出描述:
輸出最少的跳數,無法到達輸出-1。
Python解法:
# -*- coding:utf-8 -*-
"""
袋鼠過河
"""
import sys
def main():
dp = [0]
for i in range(1, n+1):
dp.append(-1)
print(th)
print(dp)
for i in range(n):
if dp[i] == -1:
continue
j = 1
while j <= th[i] and i + j <= n:
if dp[i+j] == -1 or dp[i+j] >= dp[i] + 1:
dp[i + j] = dp[i] + 1
j += 1
print(dp)
if dp[n] == -1:
print(-1)
else:
print(dp[n])
if __name__ == ‘__main__‘:
n = int(sys.stdin.readline().strip())
th = list(map(int, sys.stdin.readline().strip().split()))
main()
練習題7:袋鼠過河(使用了動態規劃求解)