滚动数组详解
来源:互联网 发布:淘宝卖家页面生成器 编辑:程序博客网 时间:2024/06/04 20:07
【滚动数组】 可以想象成显示屏,对于有很多的数字来说,每次只显示有限的数字,用完(显示完)就向后移动一位,显示的数量不变,但是在卡内存比较紧的题中,可以节省很多空间。
最典型的就是斐波那契数列,普通的求解方法不外乎就是用递推式f[i]=f[i-1]+f[i-2],但是这个如果数据量大的话会爆内存,而用滚动数组的方法可以用3个单位大小的空间求得解,这样就节省了很多的空间。
斐波那契数列普通解法:
#include<iostream>#include<cstdio>using namespace std;int f[100];int ff(int n){f[0] = 0;f[1] = 1;f[2] = 1;for(int i = 3; i <= n; ++i)f[i] = f[i - 1] + f[i - 2];return f[n];}int main(){int t, n;scanf("%d", &t);while(t--){scanf("%d", &n);printf("%d\n", ff(n));}return 0;}
滚动数组解法:
#include<cstdio>using namespace std;int f[3];int ff(int n){f[1] = 0;f[2] = 1;for(int i = 2; i <= n; ++i){f[0] = f[1];f[1] = f[2];f[2] = f[0] + f[1];}return f[2];}int main(){int t, n;scanf("%d", &t);while(t--){scanf("%d", &n);printf("%d\n", ff(n));}return 0;}
这样解释就很明白了,滚动数组一般在DP题和状态压缩算法方面用的多,而且优化后效率很高,推荐使用。
阅读全文
1 0
- 滚动数组详解
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 51Nod-1174-区间中最大的数
- 1、SSL证书部署
- exec执行存储过程提示"违反主键约束"
- 关于设计方案
- Node.js ORM框架Sequlize之表间关系
- 滚动数组详解
- 属性 方法 构造器 20170726
- hdu 6035 Colorful Tree
- Set和List简单区别
- Python多进程
- centos里切割nginx的access.log
- 欢迎使用CSDN-markdown编辑器
- ZOJ 2103 Marco Popo the Traveler(dfs+欧拉路)
- 关于行尾不一致,是否标准化的原因及办法