滚动数组
来源:互联网 发布:淘宝店面粉红招牌图片 编辑:程序博客网 时间:2024/05/16 10:15
滚动数组一般能节省较多的空间,能应用此方法的题目一般为DP,背包此类有递推关系式的题目。
拿斐波那契数列举个例子:
#include<stdio.h>int main(){int n;int dp[105]={0,1,1};scanf("%d",&n);for(int i=3;i<=n;i++) dp[i]=dp[i-1]+dp[i-2]; printf("%d\n",dp[n]); return 0;}
dp[i]=dp[i-1]+dp[i-2]; i>=3
这里可以看到当前状态只跟之前的两个状态有关,也就是说dp[i-k],k>=3,那些都是没用的。
所以我们可以对上式Mod3。
#include<stdio.h>int main(){int n;int dp[3]={0,1,1};scanf("%d",&n);for(int i=3;i<=n;i++) dp[i%3]=dp[(i-1)%3]+dp[(i-2)%3]; printf("%d\n",dp[n%3]); return 0;}你所要开的数组大小就由前面几组会对当前状态产生影响决定。
这是一维的情况,若问题为多维的思路也是一样的,找出有影响的维度和可以Mod的维度,将可以mod的取模即可。
0 0
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 滚动数组
- 数组
- 进程间通讯的几种方式
- DirectX11 视口
- bzoj 2502 有上下限的最小流
- HDU 4602 Partition(快速幂)
- 滚动数组
- [LeetCode]Power of Two
- 银行储蓄系统
- Myeclipse如何自动创建hibernate
- CocoaPods详解之----使用篇
- vc++ 多线程编程(初学)
- 互联网蜗牛求职记--笔试面试汇总
- java动态代理
- codeforces 183B - Zoo