洛谷P1052 過河 狀壓dp

2021-08-19 05:27:15 字數 1426 閱讀 9059

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

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

輸入格式:

輸入檔案第一行有乙個正整數l(1 <= l <= 10^9),表示獨木橋的長度。

第二行有三個正整數s,t,m,分別表示青蛙一次跳躍的最小距離,最大距離,及橋上石子的個數,其中1 <= s <= t <= 10,1 <= m <= 100。

第三行有m個不同的正整數分別表示這m個石子在數軸上的位置(資料保證橋的起點和終點處沒有石子)。所有相鄰的整數之間用乙個空格隔開。

輸出格式:

輸出檔案river.out只包括乙個整數,表示青蛙過河最少需要踩到的石子數。

輸入樣例#1:複製

10

2 3 5

2 3 5 6 7

輸出樣例#1:複製

2

對於30%的資料, l≤10000l \le 10000l≤

1000

0 ;對於全部的資料, l≤109l \le 10^29l≤

109 。

2005提高組第二題

講真,我真的不知道還有狀壓dp這種東西啊

看來我還是得需要多加練習啊

#include#include#includeusing namespace std;

#define maxn 1000002

#define inf 0x7ffffff

int dp[maxn];

int stone[maxn];

int a[maxn];

int l;

int s, t, m;

int ans;

int k;

int main()

sort(a + 1, a + 1 + m);

for (int i = 1; i <= m; i++)

for (int i = 1; i <= maxn; i++) dp[i] = 1 << 15;

dp[0] = 0;

for (int i = 1; i <= 2520*100; i++) }

cout << dp[2520 * 100];

return 0;

}

洛谷 P1052 過河(狀壓dp)

題意 在一條長為 l l 的獨木橋上有很多石子 座標為 mi role presentation style position relative mim i有乙隻青蛙要從座標零點跳到 l l 處或者跳過 l role presentation style position relative l l,...

洛谷P1052 過河(dp 狀壓)

題目鏈結 題目描述 在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點 0,1,l 其中ll是橋的長度 座標為0的點表示橋的起點,座標為l的點表示...

洛谷P1052 過河 dp

題目大意 獨木橋長度l,橋上有m個石頭,要過橋,起點0,只要跳到或者跳過l都算過了,每次跳躍距離是s t之間的整數值,問跳過橋最少需要踩到的石子數 dp i 表示跳躍了距離i,最少需要踩到的石子數。stone i 表示在距離i有無石頭。狀態轉移方程 dp i min dp i dp i j ston...