解题思路
考虑 f i , j f_{i,j} fi,j表示 i i i个数划分 j j j的方案数
- 有一份为1, f i − 1 , j − 1 f_{i-1,j-1} fi−1,j−1
- 往每一份加上1, f i − j , j f_{i-j,j} fi−j,j
Code
#include <iostream>
#include <cstdio>
using namespace std;
int n, m;
long long f[250][250];
int main(){
scanf ("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
f[i][i] = 1;
for (int i = 2; i <= n; i++)
for (int j = 1; j < i; j++)
f[i][j] = f[i - 1][j - 1] + f[i - j][j];
printf ("%lld", f[n][m]);
}