璟雯院

珺璟如晔,雯华若锦

用户工具

站点工具


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 由 温婕莺