题解
2023-03-17 16:42:01
发布于:上海
51阅读
0回复
0点赞
#include <iostream>
#include <queue>
using namespace std;
int cnt;
int n,k;
void DFS2(int si,int sum,int step)
{
if(stepk) //基线
{
if(sumn)
cnt++;
else
return;
}
else
{
for(int j=si;j<=(n-sum+1)/(k-step);j++) //优化循环,不然超时
{
if(sum+j<=n&&si<=j)
{
DFS2(j,sum+j,step+1);
}
}
}
return;
}
int main()
{
cin >>n >>k;
DFS2(1,0,0); //第一个数从一开始搜索
cout <<cnt;
return 0;
}
全部评论 2
#include <iostream> #include <queue> using namespace std; int cnt; int n,k; void DFS2(int si,int sum,int step) { if(step == k) //基线条件 { if(sum == n) cnt++; else return; } else { //优化循环,减少不必要的迭代 for(int j=si; j<=(n-sum+1)/(k-step); j++) { if(sum + j <= n && si <= j) { DFS2(j, sum + j, step + 1); } } } return; } int main() { cin >> n >> k; DFS2(1, 0, 0); //第一个数从1开始搜索 cout << cnt; return 0; }带缩进代码
2天前 来自 北京
1if(stepk) //基线 { if(sumn)
这段代码不对,因该是
if(step == k) //基线 { if(sum == n)
2天前 来自 北京
1
有帮助,赞一个