## page was renamed from hdu1297 参加代码 {{{ #!cplusplus /* hdu1297 递推求解 大整数 ymc 2008/9/24 题目大意: 有n个人站成一列,但是含单个女的队列是不合法的。总共有多少种 合法的队列。F表示男的,M表示女的。 分析与解题思路 设:F(n)表示n个人的合法队列,则: 按照最后一个人的性别分析,他要么是男,要么是女, 所以可以分两大类讨论: 1、如果n个人的合法队列的最后一个人是男, 则对前面n-1个人的队列没有任何限制,他只要站在最后即可, 所以,这种情况一共有F(n-1); 2、如果n个人的合法队列的最后一个人是女, 则要求队列的第n-1个人务必也是女生, 这就是说,限定了最后两个人必须都是女生,这又可以分两种情况: 1)去掉最后两个女的后,剩下的队列是合法队列,则有F(n-2)种 2) 去掉最后两个女的后,剩下的队列是不合法的,则该不合法队列 最后两个肯定是FM,有F(n-4)种。 注意:大整数 */ #include using namespace std; const int N=1001; const int M=100; const int Max=100000000;//每一段存8位 struct Big { int s[M]; int len; }; Big f[N]; void Add(Big &a,Big &b,Big &c,Big &d) { d.len=a.len; int t=0; for(int i=0;i0) { d.s[d.len]=t; d.len++; } } void OutPut(Big &a) { int i=a.len-1; printf("%d",a.s[i]); for(i=a.len-2;i>=0;i--) printf("%08d",a.s[i]); printf("\n"); } void Init() { f[0].s[0]=1;f[0].len=1; f[1].s[0]=1;f[1].len=1; f[2].s[0]=2;f[2].len=1; f[3].s[0]=4;f[3].len=1; for(int i=4;i