動態規劃 跳石板 python

2021-10-02 18:20:33 字數 975 閱讀 6590

在這裡插入**片

n,m =

[int

(x)for x in input()

.split()

]steps =

[i for i in range

(n,m+1)

]#儲存由n到m之間的石板

commondivisors =

#儲存由n到m之間每一塊石板允許跳的步數

for i in steps:

commondivisori =

[x for x in range(2

,i)if i/x%1==

0]#對於石板i允許跳的步數,需要刪除1和i本身

commondivisors.

(commondivisori)

dp =

[i-n for i in range

(n,m+1)

]#初始dp中石板n跳躍到石板i的步數都令為i-n

for i in range

(n,m+1)

:for x in range

(n,i)

:for j in commondivisors[x-n]

:if x+j==i and

(dp[x-n]

!= x-n or dp[x-n]==0

):#要求由石板x能跳到石板i,跳躍步數為x的約數j,並且要求石板x也是能夠跳躍到的石板或者x石板為初始石板n

dp[i-n]

=min

(dp[i-n]

,dp[x-n]+1

)#狀態轉移方程

for i in range

(n+1

,m+1):

if dp[i-n]

== i-n:

#對於不可跳躍到的石板,令其為-1

dp[i-n]=-

1print

(dp[m-n]

)

跳石板(詳解)

題目分析 這道題就是計算從n開始加,最少加幾次等於m,前提條件是每次相加的數必須是當前數的約數 思路分析 將m個石板看做乙個儲存結果的陣列jumpnum,每個jumpnum i 中都儲存著從n到當前位置最小的步數,如果是0,則說明不能走到這個位置。從起點開始對jumpnum進行遍歷,先求當前位置的所...

每日一題 26 跳石板 貪心 動態規劃

小易來到了一條石板路前,每塊石板上從1挨著編號為 1 2 3 這條石板路要根據特殊的規則才能前進 對於小易當前所在的編號為k的 石板,小易單次只能往前跳k的乙個約數 不含1和k 步,即跳到k x x為k的乙個非1和本身的約數 的位置。小易當前處在編號為n的石板,他想跳到編號恰好為m的石板去,小易想知...

跳石板(待改進)

題目描述 小易來到了一條石板路前,每塊石板上從1挨著編號為 1 2 3 這條石板路要根據特殊的規則才能前進 對於小易當前所在的編號為k的 石板,小易單次只能往前跳k的乙個約數 不含1和k 步,即跳到k x x為k的乙個非1和本身的約數 的位置。小易當前處在編號為n的石板,他想跳到編號恰好為m的石板去...