一种小技巧---滚动数组

一种常见的空间优化方式——应用:逆推算法和动态规划

dp的一种编程思想,简单理解即让数组滚动起来,每次都使用固定的几个存储空间,来达到压缩,节省存储空间的作用。起到优化空间。

典型例子:斐波那契数列-逆推公式:fibn=fibn−1+fibn−2

#include<stdio.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;
}

知道n-1项和n-2项就能知道第n项,与n前面的各项没关系,即可优化为:


#include<cstdio>
using namespace std;
int d[3];
int main()
{
	int n;
	scanf("%d",&n);
	d[1]=1,d[2]=1;
	for(int i=3;i<=n;i++)
	{
		d[0]=d[1];
		d[1]=d[2];
		d[2]=d[0]+d[1];
	}
	printf("%d",d[2]);
	return 0;
}