【ybtoj】【递推】【例题1】错排问题

传送门
题目


解题思路

f i f_i fi i i i个数错排的方案

n n n放在第 k k k位上,有 ( n − 1 ) (n - 1) (n1)种方案

  • 如果将 k k k放在第 n n n位上,剩下的 n − 2 n-2 n2个数错排,那么就有 f i − 2 f_{i-2} fi2种方案
  • 如果不把 k k k放在第 n n n位上,剩下 n − 1 n-1 n1个数错排, f i − 1 f_{i-1} fi1

Code

#include <iostream>
#include <cstdio>

using namespace std;

long long n, f[30];

int main(){
    
    
	scanf ("%lld", &n);
	f[2] = 1;
	for (int i = 3; i <= n; i++)
		f[i] = (i - 1) * (f[i - 1] + f[i - 2]);
	printf ("%lld", f[n]);
}

猜你喜欢

转载自blog.csdn.net/qq_39940018/article/details/111594368