滚动数组

很多时候,我们会做一些数据大的题,如求斐波那契数列第14451496144项的值。这当然可以用递归+记忆化+矩阵加速或通项公式来求解。但这时这时如果用迭代的话数组就需要开到14451496144这么大,此时占用空间太大,所以我们要引入滚动数组的概念。滚动数组其实就是通过一定运算来以时间换空间(对我这种暴力卡常党很不友好)。举个例子,斐波那契数列的迭代可以写成这个样子:

int fib[4]={0,1,1,2};
for(int i=0;i<n;i++){
      a[i%3]=a[(i-1)%3]+a[(i-2)%3];
}
注意,这种方法会使程序变慢,而且由于无法记忆之前的过程,并不适合所有DP。
posted @ 2020-10-23 13:10  一杯好凉茶  阅读(134)  评论(0编辑  收藏  举报