本文主要是介绍大搬家 (2016百度之星 - 测试赛(热身,陈题)),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
大搬家
看到这道题第一眼 就是感觉找规律。。
可还是想了好久 。。。。
如果搬家三次和搬家依次一样 那么必是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>
long long f[1000000+5];
int main()
{f[1]=1;f[2]=2;for(int i=3;i<1000000+1;i++)f[i]=(f[i-1]+(i-1)*f[i-2])%1000000007;int ncase;int t=1;scanf("%d",&ncase);while(ncase--){int n;scanf("%d",&n);printf("Case #%d:\n%d\n",t++,f[n]);}
}
这篇关于大搬家 (2016百度之星 - 测试赛(热身,陈题))的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!