本文主要是介绍算法提高之加成序列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
算法提高之加成序列
-
核心思想:迭代加深 + dfs
- 从上往下逐渐增大depth 这样下面没有用的方案就不用遍历了
-
#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 110;int n;int path[N];//当前求哪个位置,最大深度bool dfs(int u,int depth){if(u == depth) return path[u-1] == n;bool st[N] = {false};for(int i=u-1;i>=0;i--) //从后往前找for(int j=u-1;j>=0;j--){int s = path[i] + path[j];if(s >= path[u-1] && s<=n && !st[s]){st[s] = true;path[u] = s;if(dfs(u+1,depth)) return true;}}return false;}int main(){while(cin>>n,n){int depth = 1;path[0] = 1;while(!dfs(1,depth)) depth++;for(int i=0;i<depth;i++) cout<<path[i]<<" ";cout<<endl;}}
这篇关于算法提高之加成序列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!