对于每组数据,先输出一行 Case #i: 然后输出结果,对[Math Processing Error] 取模。
Sample Input
2
1
3
Sample Output
Case #1:
1
Case #2:
4 分析:
如果搬家三次和搬家依次一样 那么必是A->B,B->A类型的
如果f[n-1]=x
那么在n时可以考虑:
如果加了第n个人我们不用他 那么总数为f[n-1]
如果我们用了第n个人 共有n-1个人可以和他结合总数为(n-1)*f[n-2]
所以公式f[n]=f[n-1]+(n-1)*f[n-2]
#include<stdio.h> using namespace std; #define N 1000000+5 long long a[N]; const int mod=1000000007; /*int fact(int n) { int ans=1,i; if(n<=1) return 1; for(i=1;i<=n; ++i) ans*=i; return ans; }*/
int main() { a[1]=1; a[2]=2; for(int i=3;i<N;i++) a[i]=(a[i-1]+(i-1)*a[i-2])%mod; int t; scanf("%d",&t); while(t--) { int n=0; n++; scanf("%d",&n); printf("case #%d:\n%d\n",n,a[n]); }