您的位置:首页 > 其它

hdu 1465 错排问题(递归问题)

2016-02-12 09:42 204 查看
分析:假设n-1的情况已知,当n时,一种情况是前n-1种情况都错了,F(n-1)第n封只需和其中任何一封换一下就行,所以有F(n-1)*(n-1)情况,第二种情况是前n-1封有一封撞对了,F(n-2)将第n封与这封换一下即可,即F(n-2)*(n-1)种情况;

           错排公式: 基本形式:d[1]=0;   d[2]=1

                                递归式:d
= (n-1)*( d[n-1] + d[n-2])

注意:方法数可能超过int型~

AC代码:

#include<iostream>

#include<cstdio>

#include<cstring>

#include<algorithm>

using namespace std;

__int64 a[50];

int main()

{
a[1]=0;a[2]=1;a[3]=2;
int i;
for(i=4;i<=30;i++)
{
a[i]=(i-1)*a[i-1]+(i-1)*a[i-2];
}
int n;
while(~scanf("%d",&n))
{
printf("%I64d\n",a
);
}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: