【递推】【YBTOJ】错排问题

在这里插入图片描述


思路:

设f[i]为A1~Ai的最小划分段数
f [ i ] = ( i − 1 ) ∗ ( f [ i − 2 ] + f [ i − 1 ] ) f[i]=(i - 1) * (f[i - 2] + f[i - 1]) f[i]=(i1)(f[i2]+f[i1])


C o d e Code Code:

#include <cstdio>
#include <iostream>

using namespace std;
long long n ,f[10001 ];
int main ()
{
    
    
	scanf("%lld",&n);f[1] = 0,f[2] = 1;//初始化
	for (int i = 3;i <= n; ++i)
	f[i]=(i - 1) * (f[i - 2] + f[i - 1]);
	printf("%lld",f[n]);
    return 0;	
} 

猜你喜欢

转载自blog.csdn.net/hunkwu/article/details/114220825