一种常见的空间优化方式——应用:逆推算法和动态规划
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;
}