在這裡插入**片
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的石板去...