洛谷 P1052 過河

2021-08-21 07:17:57 字數 694 閱讀 5540

題目:過河

思路:因為l的值太大,而實際有石子的地方卻並不多,所以要先進行離散化。

即將每個石子之間的差距都控制在剛好比t大一點的位置,這樣就不會影響最終結果。

令f[i]表示跳過前i個位置需要最少踩得石頭數量,轉移方程f[i]=min(f[i+j]+cnt[i],f[i]),j∈[s,t]。

注意最後的輸出是min,i∈[l,l+t)。

**:

#includeusing namespace std;

#define maxd 10

#define maxm 100

#define maxl 200000

#define inf (1<<30)

int l;

int s,t,m;

int a[maxm+5]= ;

int cnt[maxl+5]= ;

int f[maxl+5]= ;

void readin()

a[m+1]=l;

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

l=0;

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

cnt[l]=0;

}int dp()

} }int ans=inf;

for(int i=l; ireturn ans;

}int main()

洛谷 P1052過河

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

洛谷 P1052 過河

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

洛谷 P1052 過河

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