動態規劃空間優化之滾動陣列

2022-06-20 16:15:11 字數 851 閱讀 1072

使用範圍:使用在遞推或動態規劃中

作用:節約空間

注意:時間上沒什麼優勢

舉例1)作用在一維陣列:

普通方法:

int d=new int[100];

d[0]=1;d[1]=1;

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

system.out.printf("%d

",d[99]);

上述方法使用100個空間(近似認為),

注意,上面這個迴圈d[i]只需要解集中的前2個解d[i-1]和d[i-2];為了節約空間用滾動陣列的方法

使用滾動陣列:

int d=new int[3];

d[0]=1;d[1]=1;

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

system.out.printf("%d

",d[99%3]);

注意上面的運算,我們只留了最近的3個解,陣列好象在「滾動一樣,所以叫滾動陣列

2)作用在二維陣列

舉例普通方法:

int d=new int[100][100];

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

}

上面的方法需要1000×1000的空間。

注意d[i][j]只依賴於d[i-1][j],d[i][j-1];可以使用滾動陣列

使用滾動陣列:

int d=new int[2][100];

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

}

滾動陣列使用2×1000的空間解決問題, 並且通過滾動,獲得和1000×1000一樣的效果。

初學演算法 動態規劃之滾動陣列

魅力手鐲 描述 貝西去了購物中心的珠寶店,發現了乙個迷人的手鐲。當然,她想用n 1 中可能的最佳魅力來填充它 n 3402 可用的護身符。所提供列表中的每個咒語都有乙個權重wi 1 wi 400 乙個 可取性 因子di 1 di 100 最多可使用一次。貝西只能支援重量不超過m 1 的魅力手鐲 m ...

尋寶 動態規劃 滾動陣列)

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

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

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