#include<bits/stdc++.h>
#include<string.h>
using namespace std;
int n,k,ans;
void dfs(int step,int sum,int start)
{
if(sum>n) return ;
if(step==k)
{
if(sum==n)
ans++;
return;
}
for(int i=start;i<n&&sum+i*(k-step)<=n;i++)//循环范围的界限意思是当前累和加上剩余份都是i的总和
{
sum+=i;
dfs(step+1,sum,i);
sum-=i;
}
}
int main()
{
cin>>n>>k;
dfs(0,0,1);
cout<<ans;
return 0;
}
洛谷 P1025 [NOIP2001 提高组] 数的划分
最新推荐文章于 2024-08-04 22:43:03 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)