1. 程式人生 > >練習題7:袋鼠過河(使用了動態規劃求解)

練習題7:袋鼠過河(使用了動態規劃求解)

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:袋鼠過河(使用了動態規劃求解)