動態規劃 青蛙跳

2022-08-16 23:09:26 字數 1067 閱讀 9702

description

在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點:0,1,……,l(其中l是橋的長度)。座標為0的點表示橋的起點,座標為l的點表示橋的終點。青蛙從橋的起點開始,不停的向終點方向跳躍。一次跳躍的距離是s到t之間的任意正整數(包括s,t)。當青蛙跳到或跳過座標為l的點時,就算青蛙已經跳出了獨木橋。

題目給出獨木橋的長度l,青蛙跳躍的距離範圍s,t,橋上石子的位置。你的任務是確定青蛙要想過河,最少需要踩到的石子數。

input

有多組測試資料。

對於每組測試資料,第一行四個正整數l, s, t, n(1 <= l <= 10^5, 1 <= s <= t <= 10,1 <= n <= 100),分別表示獨木橋的長度,青蛙一次跳躍的最小距離,最大距離,及橋上石子的個數。第二行有n個不同的正整數分別表示這n個石子在數軸上的位置(資料保證橋的起點和終點處沒有石子)。所有相鄰的整數之間用乙個空格隔開。

output

每組測試資料僅輸出一行,包括乙個整數,表示青蛙過河最少需要踩到的石子數。

sample input

10 2 3 5

2 3 5 6 7

sample output

#include#include

const

int maxn=100020

;int

flag[maxn];

intdp[maxn];

intmain()

dp[0]=0

;

for(int i=s;i<=l+t-1;i++)

}

} int res=10000

;

for(int i=l;i<=l+t-1;i++)//

l 到 l+t-1 中最小的非 -1 值

printf(

"%d\n

",res);

}

return0;

}

青蛙跳台階(動態規劃)

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 這個題採用動態規劃的思想,它每次只能跳一階或者兩階台階 那麼它跳到第n階台階就有兩種情況,從第n 1階台階一次跳一階 或者從n 2階台階一次跳兩階 那麼依次類推,只要保留跳到n 1和n...

動態規劃 1 青蛙跳台階

動態規劃 例子一 乙隻青蛙一次可以跳上1級台階,也可以跳上2級台階。求該青蛙跳上乙個n級台階總共有多少種跳法。分析 第一步 假設台階有7階的話,先從正向分析,假如先跳了一階,那麼還有六階可選,假如先挑了二階,就還有五階可選。所以可以得出,在青蛙做出乙個動作後會有f 7 f 6 f 5 第二步 在青蛙...

動態規劃 青蛙跳台階問題

問題描述 青蛙可以一次跳乙個台階,也可以一次跳兩個台階,總共有10層台階,青蛙有多少種選擇 動態規劃 設第n層的最多選擇為stage n 根據題意,可得如下狀態轉移方程 stage n stage n 1 stage n 2 如果n 10,則上述的意思就是第十層的選擇等於第九層的選擇數 第八層的選擇...