千鳥式-n個の文字がn個の封筒に入れられ、すべてを置き忘れる必要があります。入れる方法はいくつありますか。

千鳥漸化式:F(n)=(n-1)(F(n-1)+ F(n-2));

最初の3文字がa、b、c ...であるとします。エンベロープはA、B、C、...です。

その場合、aをAに入れることはできず、bをBに入れることはできません。

aをBに入れた場合。bが入れられる状況は2つあります。bがAに入れられる、bがAに入れられない、

最初のケースの場合、スキームの数はF(n-2)です。これは、条件を満たすためにaがBに入れられ、bがAに入れられるため、残りのn-2ケースのみを考慮する必要があります。

2番目のケースでは、オプションの数はF(n-1)です。これは、aをBに入れると条件が満たされ、「bをAに入れることができない」は元の「bをBに入れることができない」と同等であるためです。考慮する必要があります残りのn-1ケース

要約すると、文字aは、それ自体を除くすべての文字と組み合わせて上記の状況を形成できるため、(n-1)(F(n-1)+ F(n-2))があります。

#include <bits/stdc++.h>
using namespace std;
#define int long long
int f(int n){
    if(n==1) return 0;
    if(n==2) return 1;
    return (n-1)*(f(n-1)+f(n-2));
}
signed main()
{
    int n; cin>>n;
    cout<<f(n)<<endl;

    return 0;
}

 

 

おすすめ

転載: blog.csdn.net/qq_44132777/article/details/114646337