思路:
设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]=(i−1)∗(f[i−2]+f[i−1])
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;
}