HDU 1465 不容易系列之一(錯排)

Description

同時給n個網友每人寫了一封信,這都沒什麼,要命的是,他竟然把所有的信都裝錯了信封!注意了,是全部裝錯喲!

現在的問題是:請大家幫可憐的8006同學計算一下,一共有多少種可能的錯誤方式呢?

Input

輸入數據包含多個多個測試實例,每個測試實例佔用一行,每行包含一個正整數n(1<n<=20),n表示8006的網友的人數。

Output

對於每行輸入請輸出可能的錯誤方式的數量,每個實例的輸出佔用一行。
Sample Input
2
3

Sample Output

1
2

Solution

錯排問題,狀態轉移方程dp[n]=(n1)(dp[n1]+f[n2])dp[n]=(n-1)(dp[n-1]+f[n-2])

#include <stdio.h>
long long F[21]; //數值較大選用long long
int main()
{
    F[1] = 0;
    F[2] = 1; //初始值
    for (int i = 3; i <= 20; i++)
        //遞推求得數列每一個數字
        F[i] = (i - 1) * F[i - 1] + (i - 1) * F[i - 2];
    int n;
    while (scanf("%d", &n) != EOF)
        printf("%lld\n", F[n]); //輸出
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章