题目:HDOJ-1465
题目描述:
正整数n表示n个信封,分别对应了n封信,所有信都装错了信封,求有多少种错装的情况。
(1<n<=20)
思路:
先假设第n封正确,对于前n-1封讨论,分为两种情况
①当前n-1封中有n-1封错排,令其中1封与第n封调换,即可达到全错,该情况为(n-1)*f(n-1)
②当前n-1封中有n-2封错排,让正确的那封信与第n封对调,而正确的那封信有n-1种情况,所以该情况为(n-1)*f(n-2)
由此得到 错排公式:f(n) = (n-1) * ( f(n-1) + f(n-2) )
以下代码:(记得用long long类型)
#include<iostream>
using namespace std;
int main