跳石板(詳解)

2021-09-24 06:16:55 字數 908 閱讀 7832

題目分析:

這道題就是計算從n開始加,最少加幾次等於m,前提條件是每次相加的數必須是當前數的約數

思路分析:

將m個石板看做乙個儲存結果的陣列jumpnum,每個jumpnum[i]中都儲存著從n到當前位置最小的步數,如果是0,則說明不能走到這個位置。從起點開始對jumpnum進行遍歷,先求當前位置的所有約數也就是當前位置可以向前走的步數,然後更新到能到達的位置的最小步數。之前沒有來過這個位置,就將該位置更新為當前步數+1,否則更新為之前的步數和當前步數+1兩者最小的,經過遍歷一一次後得到結果,jumpnum[m]就是從n開始加,加到m的最少次數,如果是0,說明不可能加到m。

**思路:

上**:

#include

#include

#include

using

namespace std;

//計算約數,求除了1和本身的約數

void

divisornum

(int n, vector<

int>

& divnum)}}

intjump

(int n,

int m)

}for

(int i =

0; i < stepnum.

size()

;++i)

cout << endl;

if(stepnum[m]==0

)return-1

;else

//初始化時多給了一步,故需要減1

return stepnum[m]-1

;}intmain()

網易跳石板問題詳解

基本思想 dp演算法 首先建立乙個最大值 1那麼大的陣列表示每乙個石板,之所以是最大值 1的原因是要取下標為最大值的石板 然後遍歷每個石板,把每個石板的約數都儲存起來,然後取到從這個石板過去的最小值 即最優解 然後取最大值對應的那個石板返回就ok dp演算法的核心思維其實就是每一步取最優解,它也是一...

跳石板(待改進)

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

跳石板問題 C

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