思路:
设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;
}