题目描述
将整数 n 分成 k 份,且每份不能为空,任意两个方案不相同(不考虑顺序)。
例如: n=7 , k=3 ,下面三种分法被认为是相同的。
1,1,5 ;
1,5,1 ;
5,1,1 .
问有多少种不同的分法。
输入输出格式
输入格式:
n,k ( 6<n≤200 ,2≤k≤6 )
输出格式:
1 个整数,即不同的分法。
输入输出样例
输入样例#1:
7 3
输出样例#1:
4
源代码
#include<iostream>
using namespace std;
int main()
{
int n,k;
int dp[210][10]={0};
int i,j;
cin>>n>>k;
dp[0][0]=1;
for(i=1;i<=n;i++)
{
for(j=1;j<=k;j++)
{
if(j>i)//超出范围时归零
dp[i][j]=0;
else
dp[i][j]=dp[i-1][j-1]+dp[i-j][j];//第一个数为1的情况+第一个数不为1所有情况
}
}
cout<<dp[n][k]<<endl;
return 0;
}