c 滾動陣列

2022-02-23 12:27:29 字數 489 閱讀 6595

說來慚愧,我老早以前就學習了dp,可直到最近才知道滾動陣列。

所以說,滾動陣列是什麼呢?

它是一種優化dp空間複雜度的思想。

在dp轉移時,我們往往不需要之前推的所有的,而是只需要前一兩個轉移的。

我們以斐波那契數列為例,**如下:

for(int i=2;i<100;i++)

printf("%d",d[99]);

可以發現,如果求解99位,那麼需要使用將近快100個儲存單元。

如果求解位數更多,那麼空間就爆了。

那用滾動陣列怎麼優化呢?

for(int i=2;i<100;i++)

printf("%d

",d[99%3]);

這裡無論求多少個,只需要留出三個儲存單元的位置即可。

可以發現,空間優化了很多,但時間沒有優化,甚至會更差。

而且,滾動陣列還會覆蓋之前的解,所以不是所有dp都能這麼優化。

滾動陣列詳解

滾動陣列 可以想象成顯示屏,對於有很多的數字來說,每次只顯示有限的數字,用完 顯示完 就向後移動一位,顯示的數量不變,但是在卡記憶體比較緊的題中,可以節省很多空間。最典型的就是斐波那契數列,普通的求解方法不外乎就是用遞推式f i f i 1 f i 2 但是這個如果資料量大的話會爆記憶體,而用滾動陣...

筆記 滾動陣列!

滾動陣列。對於我這種不會用結果怕各種mle和各種tle的人來說確實是一向短處 滾動的實質 膜法光輝 霧 吐槽不多說現在我們來看一下 乙個dp,平常如果需要1000 1000的空間,其實根據dp的無後效性,可以開成2 1000,然後通過滾動,獲得和1000 1000一樣的效果。滾動陣列常用於dp之中,...

Top Secret Task dp 滾動陣列

傳送門 題目 dp i j k 表示 考慮到第i個數 計算前j個數的和 進行了k次操作 則有若不把第i個數放入前j個數中 dp i j k dp i 1 j k 若把第i個數放入前j個數中 至少需要把第i個移到第j個,即進行i j次操作 if k i j dp i j k dp i 1 j 1 k ...