题目:http://lx.lanqiao.cn/problem.page?gpid=T4#submitpanel
思路:
Fibonacci数列,计算到后面出现指数级别的增长,所以对它进行取模运算有两种方法:(具体选哪个,看数据范围要求)
1.先整体计算后取模,(f(n-1)+f(n-2))%mod;
2.先进行分别取模,之后再取模f(n-1)%mod+f(n-2)%mod;
//记忆化递归,空间换时间,降低时间复杂度。
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
long long f[n];
f[0] = 0,f[1] = 1;
for(int i=2;i<=n;i++){
f[i] = (f[i-2]+f[i-1])%10007;
}
cout<<f[n]<<endl;
return 0;
}
//换递归为递推,降低时间复杂度。同时未增加时间复杂度!
#include<iostream>
using namespace std;
int main(){
long long int n;
cin>>n;
int f2=1;
int f1=1;
int t=1; //临时变量
if(n>2){
for(int i=3;i<=n;i++){
t=f2;
f2=(f2+f1)%10007;
f1=t;
}
cout<<f2%10007;
}else{
cout<<1;
}
return 0;
}