《滾動數組》---動態規划思想


滾動數組是DP中的一種編程思想。簡單的理解就是讓數組滾動起來,每次都使用固定的幾個存儲空間,來達到壓縮,節省存儲空間的作用。起到優化空間,主要應用在遞推或動態規划中(如01背包問題)。因為DP題目是一個自底向上的擴展過程,我們常常需要用到的是連續的解,前面的解往往可以舍去。所以用滾動數組優化是很有效的。利用滾動數組的話在N很大的情況下可以達到壓縮存儲的作用。

當然是用時間去換空間的

在斐波那契數列中

#include<bits/stdc++.h>
int main()
{
    int i;
    long long d[80];
    d[0]=1;
    d[1]=1;
    for(i=2;i<80;i++)
    {
        d[i]=d[i-1]+d[i-2];
    }
    printf("%lld\n",d[79]);
    return 0;
}

上面這個循環d[i]只依賴於前兩個數據d[i - 1]和d[i - 2]; 為了節約空間用滾動數組的做法,可以將整個dp數組壓縮成dp[3]

#include<bits/stdc++.h>
int main()
{
    int i;
    long long d[3];
    d[1]=1;
    d[2]=1;
    for(i=2;i<80;i++)
    {
        d[0]=d[1];
        d[1]=d[2];
        d[2]=d[0]+d[1]; 
    }
    printf("%lld\n",d[2]);
    return 0;
}

滾動數組在DP中能起很大作用尤其是當原本需要申請得內存大小很大得情況下

滾動數組在回文串中的應用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM