您的位置:首页 > 其它

HDU 1465 不容易系列之一

2013-06-06 11:27 267 查看
十本不同的书放在书架上。现重新摆放,使每本书都不在原来放的位置。有几种摆法?这个问题推广一下,就是错排问题: n个有序的元素应有n!种不同的排列。如若一个排列式的所有的元素都不在原来的位置上,则称这个排列为错排。

递推的方法推导错排公式:

当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推.

第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法;

第二步,放编号为k的元素,这时有两种情况⑴把它放到位置n,那么,对于剩下的n-1个元素,由于第k个元素放到了位置n,剩下n-2个元素就有M(n-2)种方法;⑵第k个元素不把它放到位置n,这时,对于这n-1个元素,有M(n-1)种方法;

综上得到
M(n)=(n-1)[M(n-2)+M(n-1)]

特殊地,M⑴=0,M⑵=1.

#include<stdio.h>
int main()
{
long long a[50]={0,0,1};
for(int i=3;i<=20;i++)
a[i]=(i-1)*(a[i-1]+a[i-2]);
int n;
while(scanf("%d",&n)==1&&n)
printf("%I64d\n",a
);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: