#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll f[210][10];
int main(){
int n,k;
cin>>n>>k;
f[1][1]=1;
for(int i=2;i<=n;i++){
f[i][i]=1;
f[i][1]=1;
for(int j=2;j<i&&j<=k;j++){
f[i][j]=f[i-j][j]+f[i-1][j-1];
}
}
cout<<f[n][k];
return 0;
}
这题比较简单
给你一堆数,让你划分成k组
无非就只要两种情况,某个排序存在1和某个排列不存在1
如果某个排序存在1,则有f[i-j][j]方案数递推过来
否则由f[i-1][j-1]方案数递推过来
很明显两个子状态互斥
所以直接分两层枚举递推即可