滚动数组
滚动数组
滚动数组是经常在\(DP\)中使用的简单算法,简单来说所谓滚动数组就是让普通的数组滚起来,那么如何实现滚动操作呢?
通过每次使用固定的几个储存空间来达到压缩空间、节省内存的作用。可以优化\(DP\)或者递推的空间,在数据量\(N\)很大时大大减少内存开支。
EX:
求斐波那契数列。
普通数组:
#include<bits/stdc++.h>
using namespace std;
int main(){
long long seq[80];
seq[0]=1;
seq[1]=1;
for(int i=2;i<=80;i++){
seq[i]=seq[i-1]+seq[i-2];
}
cout<<seq[80];
return 0;
}
在上述过程的\(d[i]\)只需要前两个解\(d[i-1]\)和\(d[i-2]\)。
滚动数组:
#include<bits/stdc++.h>
using namespace std;
int main(){
long long seq[3];
seq[0]=1;
seq[1]=1;
for(int i=2;i<=80;i++){
seq[i%3]=seq[(i-1)%3]+seq[(i-2)%3];
}
cout<<seq[80%3]<<" ";
return 0;
}
二维滚动数组
。。。。。

浙公网安备 33010602011771号