青蛙過河 HRBUST 1186

2021-08-04 22:49:35 字數 1315 閱讀 8390

在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點: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思路: 我一看到這個題就感覺使用是乙個隱私圖搜尋,而且是乙個簡單的廣搜加 優

佇列。這樣一想就感覺此題簡單。具體操作:我們需要用乙個book陣列標記石

子的位置,在開乙個陣列標記走過的位置(我們使用的是優先佇列,不需要其他

方法再走到此位置),這樣可以減少時間空間的複雜度。然後看**。(**很

容易理解)

#include #include #include #include using namespace std;

#define maxn 100000+10

int book1[maxn];

int book[maxn];

int len,s,t,n;

struct note

};void bfs()

for(int i=s; i<=t; i++)

}return ;

}int main()

{ while(~scanf("%d %d %d %d",&len,&s,&t,&n))

{memset(book,0,sizeof(book));

memset(book1,0,sizeof(book1));

int m;

for(int i=0; i

ACM HRBUST 1186 青蛙過河

滴,集訓第二十二天打卡。沒想到老師還是開了紫書第十章訓練.我怕是沒時間去摸索new group的題目咯.不過前幾天,幾天時間磨dp感覺很舒服,果然還是慢一點好.hrbust 1186 青蛙過河 在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。...

Hust oj 1186 青蛙過河(dp)

青蛙過河 time limit 1000 ms memory limit 65535 k total submit 289 83 users total accepted 109 76 users rating special judge no description 在河上有一座獨木橋,乙隻青蛙想...

青蛙過河問題

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