博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2245 Addition Chains(算竞进阶习题)
阅读量:6422 次
发布时间:2019-06-23

本文共 1607 字,大约阅读时间需要 5 分钟。

迭代加深dfs

每次控制序列的长度,依次加深搜索

有几个剪枝:

  • 优化搜索顺序,从大往下枚举i, j这样能够让序列中的数尽快逼近n
  • 对于不同i,j和可能是相等的,在枚举的时候用过的数肯定不会再被填上所以可以去重(记得回溯)
#include 
#include
#include
#define INF 0x3f3f3f3fusing namespace std;typedef long long ll;inline int lowbit(int x){ return x & (-x); }inline int read(){ int X = 0, w = 0; char ch = 0; while(!isdigit(ch)) { w |= ch == '-'; ch = getchar(); } while(isdigit(ch)) X = (X << 3) + (X << 1) + (ch ^ 48), ch = getchar(); return w ? -X : X;}inline int gcd(int a, int b){ return a % b ? gcd(b, a % b) : b; }inline int lcm(int a, int b){ return a / gcd(a, b) * b; }template
inline T max(T x, T y, T z){ return max(max(x, y), z); }template
inline T min(T x, T y, T z){ return min(min(x, y), z); }template
inline A fpow(A x, B p, C yql){ A ans = 1; for(; p; p >>= 1, x = 1LL * x * x % yql)if(p & 1)ans = 1LL * x * ans % yql; return ans;}const int N = 1005;int n, a[N], depth;bool vis[N];bool dfs(int cur){ if(cur == depth + 1){ return a[depth] == n; } for(int i = cur - 1; i >= 1; i --){ for(int j = i; j >= 1; j --){ if(a[i] + a[j] > a[cur - 1] && !vis[a[i] + a[j]]){ a[cur] = a[i] + a[j]; vis[a[cur]] = true; if(dfs(cur + 1)) return true; vis[a[cur]] = false; } } } return false;}int main(){ while(scanf("%d", &n) != EOF && n){ for(int i = 1; ; i ++){ memset(vis, 0, sizeof vis); memset(a, 0, sizeof a); a[1] = 1; depth = i; if(dfs(2)){ for(int j = 1; j < depth; j ++) printf("%d ", a[j]); printf("%d\n", a[depth]); break; } } } return 0;}

转载于:https://www.cnblogs.com/onionQAQ/p/10523953.html

你可能感兴趣的文章
LAMP架构(apache用户认证,域名重定向,apache访问日志)
查看>>
PHP设计模式:原型模式
查看>>
struts2.0的json操作
查看>>
SQL注入神器——sqlmap
查看>>
Unity导航 (寻路系统Nav Mesh Agent)
查看>>
SaltStack配置语法-YAML和Jinja
查看>>
运用免费OA让你有意想不到的效果
查看>>
一些软件设计软则
查看>>
Linux运维基础命令
查看>>
使用PowerShell配置IP地址
查看>>
第十一章 MySQL运算符
查看>>
JAVA常见算法题(十七)
查看>>
GUI鼠标相关设置
查看>>
使用 <Iframe>实现跨域通信
查看>>
闭包--循序学习
查看>>
项目实战之集成邮件开发
查看>>
解决C3P0在Linux下Failed to get local InetAddress for VMID问题
查看>>
1531 山峰 【栈的应用】
查看>>
巧用美女照做微信吸粉,你会做吗?
查看>>
wcf学习总结《上》
查看>>