D 青蛙過河

2021-09-16 19:49:40 字數 1082 閱讀 7966

在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點: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

2題解:模型:a->b。想到從任何乙個位置到b點,都有t-s個決策,那就遍歷a+s到b+t所有的點,再二重迴圈遍歷所有的決策,取最小石子數的決策放進這個點的dp陣列裡面。最後遍歷那些超過終點的點,找到它們dp值最小的即可

#include#include#include#define inf 0x3f3f3f3f

using namespace std;

int bridge[100101];

int dp[100100];

int l,s,t,n,tmp;

int main()}}

int ans=inf;

for(int i=l;idp[i])ans=dp[i];

if(dp[i]!=-1)

}cout<}

return 0;

}

青蛙過河問題

青蛙過河是乙個非常有趣的智力遊戲,其大意如下 一條河之間有若干個石塊間隔,有兩隊青蛙在過河,每隊有3 只青蛙,如 圖 10 19所示。這些 青蛙只能向前移動,不能向後移動,且一次只能有乙隻青蛙向前移動。在移動過程中,育蛙可以向 前面的空位中移動,不可一次跳過兩個位置,但是可以跳過對方乙隻青蛙進入前面...

N 青蛙過河

description 1 一條小溪尺寸不大,青蛙可以從左岸跳到右岸,在左岸有一石柱l,石柱l面積只容得下乙隻青蛙落腳,同樣右岸也有一石柱r,石柱r面積也只容得下乙隻青蛙落腳。2 有一隊青蛙從小到大編號 1,2,n。3 初始時 青蛙只能趴在左岸的石頭 l 上,按編號乙個落乙個,小的落在大的上面 不允...

N 青蛙過河

description 1 一條小溪尺寸不大,青蛙可以從左岸跳到右岸,在左岸有一石柱l,石柱l面積只容得下乙隻青蛙落腳,同樣右岸也有一石柱r,石柱r面積也只容得下乙隻青蛙落腳。2 有一隊青蛙從小到大編號 1,2,n。3 初始時 青蛙只能趴在左岸的石頭 l 上,按編號乙個落乙個,小的落在大的上面 不允...