《滾動陣列》 滾動陣列思想,運用在動態規劃當中

2021-10-19 13:27:57 字數 1159 閱讀 1297

滾動陣列是dp中的一種程式設計思想。簡單的理解就是讓陣列滾動起來,每次都使用固定的幾個儲存空間,來達到壓縮,節省儲存空間的作用。起到優化空間,主要應用在遞推或動態規劃中(如01揹包問題)。因為dp題目是乙個自底向上的擴充套件過程,我們常常需要用到的是連續的解,前面的解往往可以捨去。所以用滾動陣列優化是很有效的。利用滾動陣列的話在n很大的情況下可以達到壓縮儲存的作用。

當然是用時間去換空間的

舉個簡單的例子

斐波那契數列:

#include

int main(

) printf(

"%lld\n",d[79]);

return 0;

}

上面這個迴圈d[i]只依賴於前兩個資料d[i - 1]和d[i - 2]; 為了節約空間用滾動陣列的做法。

#include

int main(

) printf(

"%lld\n",d[2]);

return 0;

}

另一種表達形式

#include

int main(

) printf(

"%lld\n",d[79%3]);

return 0;

}

二維陣列舉例

int i, j, d[100]

[100]

;for(i = 1; i < 100; i++)

for(j = 0; j < 100; j++)

d[i]

[j]= d[i - 1]

[j] + d[i]

[j - 1]

;

上面的d[i][j]只依賴於d[i - 1][j], d[i][j - 1];

運用滾動陣列

int i, j, d[2]

[100]

;for(i = 1; i < 100; i++)

for(j = 0; j < 100; j++)

d[i % 2]

[j]= d[

(i - 1) % 2]

[j] + d[i % 2]

[j - 1]

;

《滾動陣列》 滾動陣列思想,運用在動態規劃當中

滾動陣列是dp中的一種程式設計思想。簡單的理解就是讓陣列滾動起來,每次都使用固定的幾個儲存空間,來達到壓縮,節省儲存空間的作用。起到優化空間,主要應用在遞推或動態規劃中 如01揹包問題 因為dp題目是乙個自底向上的擴充套件過程,我們常常需要用到的是連續的解,前面的解往往可以捨去。所以用滾動陣列優化是...

《滾動陣列》 動態規劃思想

滾動陣列是dp中的一種程式設計思想。簡單的理解就是讓陣列滾動起來,每次都使用固定的幾個儲存空間,來達到壓縮,節省儲存空間的作用。起到優化空間,主要應用在遞推或動態規劃中 如01揹包問題 因為dp題目是乙個自底向上的擴充套件過程,我們常常需要用到的是連續的解,前面的解往往可以捨去。所以用滾動陣列優化是...

尋寶 動態規劃 滾動陣列)

小明有一張藏寶圖,上面有m n個房間,每個房間裡面都有乙個有一定價值的寶物,小明只能從左上角的房間進入收集寶物,且每次只能向右邊或向下邊的房間繼續尋寶,最終只能從最右下的房間出來。請你幫小明計算下他最多可以收集到多少價值的寶物?輸入第一行給出兩個正整數m,n 1 輸出收集到的最大價值v,題目保證v ...