icpc:problems:加成序列
problems | |
---|---|
名称 | 加成序列 |
题目编号 | 170 |
题目链接 | acwing.com/… |
来源 | Acwing |
算法分类 | 搜索, DFS, 迭代加深, 迭代加深_例题 |
难易程度 | 容易 |
加成序列
想法
迭代加深的点在每次增加m上体现,其余就是普通搜索枚举。
代码实现
#include<cstdio> #include<cstring> const int N = 110; int n, m; int line[N]; bool DFS(int x) { if(x > m) return line[m] == n; bool vis[N]; memset(vis, false, sizeof(vis)); for (int i = x-1; i >= 1; i--) { for (int j = i; j >= 1; j--) { if(line[i] + line[j] > n || line[i] + line[j] <= line[x-1])continue; if(vis[line[i] + line[j]])continue; vis[line[i] + line[j]] = true; line[x] = line[i] + line[j]; if(DFS(x+1)) return true; } } return false; } int main() { while(scanf("%d", &n) && n) { memset(line, 0, sizeof(line)); m = 1; line[1] = 1; while(!DFS(2)) m++; for (int i = 1; i <= m; ++i) printf("%d%c", line[i], i == m ? '\n' : ' '); } return 0; }
/app/www/public/data/pages/icpc/problems/加成序列.txt · 最后更改: 2023/07/09 08:05 由 温婕莺