{四种分法为:1,1,5;1,2,4;1,3,3;2,2,3;}
f[i][j]表示把i分为j份的方案数
初始化:f[0][0]=1
转移:f[i][j]=f[i-1][j-1]+f[i-j][j]
f[i-1][j-1]:划分的j份中至少有一份为1,把这个1拿出来,剩下的相当于把i-1分为j-1份
f[i-j][j]:划分的j份中没有一份是1,每一份中都拿走1个1,剩下的相当于把i-j分为j份
#include<cstdio>
#include<algorithm>
using namespace std;
int n,k,f[201][7];
int main()
{
scanf("%d%d",&n,&k);
f[0][0]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=min(i,k);j++)
f[i][j]=f[i-1][j-1]+f[i-j][j];
printf("%d",f[n][k]);
}