小易來到了一條石板路前,每塊石板上從1挨著編號為:1、2、3.......
這條石板路要根據特殊的規則才能前進:
對於小易當前所在的編號為k的石板,小易單次只能往前跳k的乙個約數(不含1和k)步,即跳到k+x(x為k的
乙個
非1和本身的約數)的位置。
小易當前處在編號為n的石板,他想跳到編
號恰好為m的石板去,小易想知道最少需要
跳躍幾次可以到達。
例如:
n = 4,m = 24:
4->6->8->12->18->24
於是小易最少需要跳躍5次,就可以從4號石板跳到24號石板
輸入描述:
輸入為一行,有兩個整數n,m,以空格隔開。 (4 ≤ n ≤ 100000) (n ≤ m ≤ 100000)
我的解題思路是廣搜,n為搜尋起始的節點,m為搜尋結束的節點。
搜尋節點的規則:根據題目描述,對於節點k,可以展開搜尋的節點為k+x,其中x為k的約數,同時,為了避免重複搜尋節點,需要乙個標記陣列。
特別注意:求k的約數的方法通常是
for (int i = 2; i < k; i++)
}
我一開始是這麼做的,然後超時了,因為當k很大的時候迴圈次數也會變得很多,之後用這樣的方法替代
for (int i = 2; i <= math.sqrt(k); i++)
} 完整**
public class q1
for (int i = 2; i <= math.sqrt(cur); i++)
if (cur / i == i)
continue;
next = cur + cur / i; //同上
if (next <= m && !vis[next]) }}
}system.out.println(reachable ? minstep : -1);
}}
3 10 跳蚱蜢 廣度優先搜尋
有9只盤子,排成1個圓圈。其中8只盤子內裝著8只蚱蜢,有乙個是空盤。我們把這些蚱蜢順時針編號為 1 8 每只蚱蜢都可以跳到相鄰的空盤中,也可以再用點力,越過乙個相鄰的蚱蜢跳到空盤中。請你計算一下,如果要使得蚱蜢們的隊形改為按照逆時針排列,並且保持空盤的位置不變 也就是1 8換位,2 7換位,至少要經...
跳石板問題 C
小易來到了一條石板路前,每塊石板上從1挨著編號為 1 2 3 這條石板路要根據特殊的規則才能前進 對於小易當前所在的編號為k的石板,小易單次只能往前跳k的乙個約數 不含1和k 步,即跳到k x x為k的乙個非1和本身的約數 的位置。小易當前處在編號為n的石板,他想跳到編號恰好為m的石板去,小易想知道...
網易跳石板問題詳解
基本思想 dp演算法 首先建立乙個最大值 1那麼大的陣列表示每乙個石板,之所以是最大值 1的原因是要取下標為最大值的石板 然後遍歷每個石板,把每個石板的約數都儲存起來,然後取到從這個石板過去的最小值 即最優解 然後取最大值對應的那個石板返回就ok dp演算法的核心思維其實就是每一步取最優解,它也是一...