ACM總結——動態規劃(3)空間壓縮

DP系列:

https://blog.csdn.net/nameofcsdn/article/details/106417240

 

動態規劃的空間壓縮,本質上就是用時間取代空間的其中一維,使得空間複雜度降低,但時間複雜度不變

具體來說,空間壓縮就是,在同一個空間位置,不停刷新值,隨着時間的推移,他的含義一直在變化,而他的值一直是對應他的含義。

 

首先舉個最簡單的例子感受一下:

求斐波那契數列的第1000項

int ans[1005]={0,1,1};
for(int i=3;i<=1000;i++)ans[i]=ans[i-1]+ans[i-2];

時間複雜度和空間複雜度都是O(n)

而空間壓縮的寫法:

int a=1,b=1,c;
for(int i=3;i<=1000;i++)c=a+b,a=b,b=c;

這裏的a和b就是表示,在我們的計算過程中的斐波那契數列的最後兩項的值,隨着計算的不斷進行,a和b到底是對應哪2個數是一直在變化的。

 

更常規的例子是二維或者二維以上的DP,使用空間壓縮可以降低一個維度。

例如:

力扣 OJ 1223. 擲骰子模擬 https://blog.csdn.net/nameofcsdn/article/details/104999454

HDU - 1244 Max Sum Plus Plus Plus https://blog.csdn.net/nameofcsdn/article/details/53130351

CSU 1899: Yuelu Scenes CSU 1899: Yuelu Sceneshttps://blog.csdn.net/nameofcsdn/article/details/70665256

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章