P1962 P3986等基础模板
1 递归(自调用)
//加入优化
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
int fib[5005];
int f(int g){
if(g==1||g==2) return 1;
if(fib[g]!=-1) return fib[g];
fib[g]=f(g-1)+f(g-2);
return fib[g];
}
int main( ){
//memset(fib,-1,sizeof(fib));
for(int i=1;i<=5005;i++) fib[i]=-1;
int a;
int n;
scanf("%d",&n);
while(n--){
scanf("%d",&a);
printf("%d
",f(a));
}
return 0;
}
2 递推 (先读入后递归)
#include<cstdio>
#include <cstring>
using namespace std;
int main( ){
int f[1000005];
int n;
scanf("%d",&n);
while(n--){
memset(f,0,sizeof(f));
f[1]=1,f[2]=1;
int a=0;
scanf("%d",&a);
for(int i=3;i<=a;i++){
f[i]=f[i-1]%1000+f[i-2]%1000;
}
printf("%d
",f[a]%1000);
}
return 0;
}
3 递推(先递归后读入)
#include<cstdio>
#include <cstring>
using namespace std;
int f[1000005];//写在这里就能正常运行
int main( ){
//int f[1000005] 如果写在main里面,那么会爆
int n;
scanf("%d",&n);
memset(f,0,sizeof(f));
f[1]=1,f[2]=1;
for(int i=3;i<=1000005;i++){
f[i]=f[i-1]%1000+f[i-2]%1000;
}
while(n--){
int a=0;
scanf("%d",&a);
printf("%d
",f[a]%1000);
}
return 0;
}