滚动数组

滚动数组

滚动数组是经常在\(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;
}

二维滚动数组

。。。。。

posted @ 2020-10-06 16:35  Treasure_lee  阅读(407)  评论(0)    收藏  举报