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 @   shanyingrui  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示