洛谷P1052 NOIP2005 過河

2021-07-24 04:21:29 字數 619 閱讀 2498

(此題srz大神評價為玄學題

座標離散化+特判

1)當s!=t時,由於橋很長而石頭很少,所以青蛙跳很久才會跳到乙個點,由於s!=t,所以青蛙跳j的距離的方案數為

(j/(t-s))!種,可以認為青蛙一定有一種方案能跳過這個石頭;事實上,當兩塊石頭之間的距離》lcm(s,t)時,青蛙就可以隨便跳了,所以可以將每個石頭之間的距離取一下模,至於我的程式裡為什麼模105,誰知道呢。。反正能a。。玄學題麼。。。

2)當s==t時,座標離散化不適用,因為此時只有一種方案,所以要特判(就算適用考場上也要寫特判233)

#include#include#include#define f dp

#define maxl 30000+5

#define mod 105

using namespace std;

bool a[105*105+10];

int st[105];

int dp[105*105+10];

int main()

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

int length=0;

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

if(s==t)

cout<



洛谷 P1052 過河

題目 過河 思路 因為l的值太大,而實際有石子的地方卻並不多,所以要先進行離散化。即將每個石子之間的差距都控制在剛好比t大一點的位置,這樣就不會影響最終結果。令f i 表示跳過前i個位置需要最少踩得石頭數量,轉移方程f i min f i j cnt i f i j s,t 注意最後的輸出是min,...

洛谷 P1052過河

這個是題幹 這是一道noip2005年的提高組的題,那道題一看,就是要用動態規劃,狀態轉移方程也十分簡單。只需要考慮是從哪個地方來的,看看即將到達的點是否有石子。用一維陣列 f x 表示第x位的步數 額,這只是30分的寫法,l 的取值太大,陣列承受不了 之後,我又想騙一點分,就特判了一下s t的情況...

洛谷 P1052 過河

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