Acw 170.加成序列
题目描述
满足如下条件的序列
- 对于每个
( )都存在两个整数 和 ( , 和 可相等),使得 。
你的任务是:给定一个整数
如果有多个满足要求的答案,只需要找出任意一个可行解。
解题思路
递归的层数可能很深
(因为序列的长度可以很长),但是答案序列的长度会很短,举个例子,在这个序列中:
迭代加深搜索
。
剪枝操作
代码实现
#include <iostream>
using namespace std;
const int N = 110;
int n, path[N];
bool dfs(int u, int dep)
{
if (u == dep + 1) return path[dep] == n;
if (path[u - 1] * (1 << dep - u + 1) < n) return 0;
int st[N] = {0};
for (int j = u - 1; j >= 1; j -- )
{
int sum = path[u - 1] + path[j];
if (sum <= path[u - 1]) continue ;
if (st[sum] || sum > n) continue ;
path[u] = sum, st[sum] = 1;
if (dfs(u + 1, dep)) return 1;
}
return 0;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
path[1] = 1;
while (cin >> n, n)
{
int dep = 2;
while (!dfs(2, dep)) dep ++ ;
for (int i = 1; i <= dep; i ++ )
cout << path[i] << ' ';
cout << '\n';
}
return 0;
}
这些全部搞起来我们的代码就可以稳定
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)