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\n",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\n",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\n",f[a]%1000); } return 0; }