#include<iostream>
using namespace std;
int dp[210][16];
int main()
{
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++)
dp[i][1]=1;//分成一份的时候只有一种情况
for(int i=1;i<=n;i++)
for(int j=2;j<=k;j++)//分成一份的时候跳过,从2开始
{
if(i>=j)dp[i][j]=dp[i-j][j]+dp[i-1][j-1];
/*k>n情况数肯定是0;
当 i>=j时,缩小规模,分成两类讨论:
1.当至少有一个等于一,我们便可以缩小它的规模,
变成研究,dp[i-1][j-1]的情况数;
2. 当所有的都大于等于2,实际上也就等于每一份里面减去一个一,
而份数不变的情况dp[i-j][j]
*/
}
cout<<dp[n][k]<<endl;
}
/**************************************************************
Problem: 1857
User: admin
Language: C++
Result: Accepted
Time:38 ms
Memory:2088 kb
****************************************************************/