2 solutions
-
3
采用了记忆化策略,设置了一个记忆点,在输入的所有的n都小于10^6的情况下,可以节省一点点计算量
#include <iostream> using namespace std; const int MOD=1e9+7; int A[1000000];//申请足够大的空间 int p=1;//记忆点,当前数组所计算到的最远的位置 int fib(int n) { if(n>p)//如果当前的fib(n)并未算出,则需要迭代计算 { for(int i=p+1;i<=n;i++) { A[i]=(A[i-1]+A[i-2])%MOD; } p=n;//更新记忆点,防止重复计算 } return A[n]; } int T,n; int main() { A[0]=0;A[1]=1;//fib(0)和fib(1)单独初始化 scanf("%d",&T); while(T--) { scanf("%d",&n); printf("%d\n",fib(n)); } }
Information
- ID
- 17
- Time
- 1000ms
- Memory
- 512MiB
- Difficulty
- 1
- Tags
- # Submissions
- 96
- Accepted
- 27
- Uploaded By