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.
递推的方法推导错排公式:
当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; }
相关文章推荐
- hdu 1465 不容易系列之一(错排模板)
- HDU - 1465 不容易系列之一 —— 错排问题
- HDU 1465 不容易系列之一
- hdu1465 不容易系列之一 (递推方程)
- HDU 1465 不容易系列之一
- HDU 1465 不容易系列之一(找规律)
- HDU 1465 不容易系列之一
- HDU——1465不容易系列之一(错排公式)
- HDU 1465:不容易系列之一
- HDU 1465 不容易系列之一(规律..)
- 杭电hdu_1465_不容易系列之一
- hdu1465 不容易系列之一 (递推方程)
- HDU1465 不容易系列之一
- hdu-1465-不容易系列之一
- hdu 1465 - 不容易系列之一(错排)
- hdu 1465 不容易系列之一(递推。错排公式)
- HDU 1465 不容易系列之一【错排】
- hdu 1465 不容易系列之一
- HDU 1465 不容易系列之一 (错排)
- hdu 1465 不容易系列之一