luogu P3795 钟氏映射(递推)
题意
n<=107 20MB
题解
也就是给n个点,把他们一个分为一组,或两个分为一组,有多少种方法。
空间大点随便做。
我们靠递推。
一个新点,要不自己一组,要不和前面的一个点构成一组。
所以f[0]=f[1]=1
f[i]=f[i-1]*f[i-2]*(i-1)就行了
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 const int mod=14233333; 8 long long n,a,b,c; 9 int main(){ 10 scanf("%lld",&n); 11 a=b=1; 12 for(int i=2;i<=n;i++){ 13 c=b+a*(i-1); 14 c%=mod; 15 a=b;b=c; 16 } 17 printf("%lld",c); 18 return 0; 19 }