高效率的深搜简短代码题解
2024-10-02 08:22:17
发布于:广东
2阅读
0回复
0点赞
这道题目实际上非常简单,我们可以利用大家所学习的深度优先搜索去解决,欢迎大家参考和学习我的代码和题解,但是希望大家可以用我的题解和代码学习,而不是复制粘贴因为这样是无意义的在洛谷也是违规的,也希望大家能够自己思考。
我的代码:
#include <cstdio>
using namespace std;
int n, ans;
int a[20]; // 用来暂存当前的拆分方案
void dfs(int last, int sum, int depth)
{
if (sum == n)
{
// 输出当前的方案
for (int i = 0; i < depth; i++)
{
if (i > 0) printf("+");
printf("%d", a[i]);
}
printf("\n");
ans++;
return;
}
// 从 last 开始递归,确保后续选择的数字不小于 last
for (int i = last; i <= n - sum; i++)
{
a[depth] = i; // 将当前选择存入数组
dfs(i, sum + i, depth + 1); // 递归继续
}
}
int main()
{
scanf("%d", &n);
dfs(1, 0, 0); // 从 1 开始进行拆分
printf("total=%d\n", ans); // 输出方案数量
return 0;
}
这里空空如也
有帮助,赞一个