題目:過河
思路:因為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 的...