2. [2001年NOIP提高组] 数的划分

2. [2001年NOIP提高组] 数的划分

将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
1,1,5; 1,5,1; 5,1,1;
问有多少种不同的分法。

#include<bits/stdc++.h>
using namespace std;
int n,k,cnt=0;
void dfs(int last,int sum,int stp)//last上次划分所用分数,sum目前的和,stp当前步数
{
if(stp==k)//达到步数
{
if(sum==n)//且和一致时

  cnt++;//计数

return ;
}
for(int i=last;sum+i*(k-stp)<=n;i++)
dfs(i,sum+i,stp+1);//继续深搜
}
int main()
{
cin>>n>>k;
dfs(1,0,0);
cout<<cnt<<endl;
return 0;
}

posted @ 2022-10-17 09:27  shanyingrui  阅读(22)  评论(0编辑  收藏  举报