P1595 信封问题(递推AC)

    科技2022-07-11  121

    P1595 信封问题

    题目描述

    某人写了n封信和n个信封,如果所有的信都装错了信封。求所有信都装错信封共有多少种不同情况。

    输入格式

    一个信封数n(n<=20)

    输出格式

    一个整数,代表有多少种情况。

    输入输出样例

    输入 #1

    2

    输出 #1

    1

    输入 #2

    3

    输出 #2

    2

    我的思路

    这题是一个数论问题,运用数学知识很容易解出。

    全错位排序递推公式:f[n] = (n - 1)*(f[n-1] + f[n-2])

    全错位排序公式推导

    此题需要注意的是数据范围是long long, 而不是int

    小编就因为这个没AC

    我的代码

    #include<bits/stdc++.h> using namespace std; long long f[21] = {1, 0, 1, 2}, n; int main() { cin >> n; if (n <= 3) { cout << f[n]; return 0; } for (int i = 4; i <= n; i++) f[i] = (i - 1) * (f[i - 1] + f[i - 2]); cout << f[n]; return 0; }
    Processed: 0.018, SQL: 8