【题目】http://noi.openjudge.cn/ch0206/8787/
【思路】将i分成j份相当于: 将i-1分成j-1份的方案数 + 将i-j分成j份的方案数
第二种情况相当于,这j份分完后每个都加1
【代码】
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
int dp[205][10]= {0}; //将i分成j堆的方案数
for(int i=1; i<=n-k+1; i++)
{
dp[i][1]=1;
}
for(int i=1; i<=n; i++)
{
for(int j=2; j<=k; j++)
{
if(i>=j)
dp[i][j]=dp[i-1][j-1]+dp[i-j][j];
//数i分成j堆的方案数=1+2:
//1:数i-1分成j-1堆的方案数
//2:数i-j分成j堆的方案数:
// (相当于最后给这j个数每个加上1)
}
}
cout<<dp[n][k]<<endl;
}