Hust oj 1186 青蛙過河(dp)

2021-07-22 04:52:14 字數 1255 閱讀 4412

青蛙過河

time limit: 1000 ms

memory limit: 65535 k

total submit: 289(83 users)

total accepted: 109(76 users)

rating:

special judge: no

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

先標記出哪些地方有石子,然後從後往前跑dp

狀態轉移方程:dp[i] = min(dp[i],dp[i+j])    s<=j<=t;找到之前最少的需要踩的石子數,然後再加上當前是否有石子

#include#include#include#include#includeusing namespace std;

const int maxn = 100015;

const int inf = 0x3f3f3f;

int dp[maxn];

int vis[maxn];

int l,s,t,n;

int main()

dp[i] += vis[i];

}printf("%d\n",dp[0]);}}

11 8 刪除結點

刪除結點 輸入若干個正整數 輸入 1為結束標誌 建立乙個單向鍊錶,再輸入乙個整數m,刪除鍊錶中值為m的所有結點。試編寫相應程式。鍊錶結點定義 struct listnode 函式介面定義 struct listnode readlist struct listnode deletem struct ...

118 合併區間

題目描述 給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 1,4 4,5 輸出 1,5 解釋 區間 1,4 和 4,5 可被視為重疊區間。c...

11 8 學習記錄

下拉列表彈出方向預設為向下,當然我們也可以設定不同的方向。如果你希望下拉列表向右下方彈出,可以在 div 元素上新增 dropdown menu end 類 下拉列表右下方彈出 button 鏈結 1a li 鏈結 2a li 鏈結 3a li ul div 嘗試一下 如果你希望上拉選單向上彈出,可...