[Ybtoj高効率アドバンスド1.1] [再帰]ミスアライメント

[Ybtoj高効率アドバンスド1.1] [再帰]ミスアライメント

ここに画像の説明を挿入します


問題解決のアイデア

f [n]
をn個の千鳥数とします。n個の数があるとします。n
個の数はk番目(1〜n-1)の位置に
配置されます。1.kはn番目の位置に配置されるため、 n -2の数がずれている場合、この場合、
n番目の位置に配置されていない(n-1)* f [n-2]種類の2.kがあり、n-1(kを含む)があります。 )数をずらして残します(kをn番目の位置に配置できないため)、(n-1)* f [n-1]がある
ため、f [n]は(n-1)*(f [n-1])になります。 + f [n -2])


コード

#include<iostream>
#include<cstdio>
using namespace std;
long long n,f[30];
int main()
{
    
    
	scanf("%lld",&n);
	f[1]=0,f[2]=1;
	for (int i=3;i<=n;i++)
	    f[i]=(i-1)*(f[i-1]+f[i-2]);
	printf("%lld",f[n]);
	return 0;
} 

おすすめ

転載: blog.csdn.net/qq_45621109/article/details/111594330