7.6迭代加深搜索
来源:互联网 发布:一比一可拆卸枪模淘宝 编辑:程序博客网 时间:2024/05/16 04:47
迭代加深搜索是一个应用范围很广的算法,不仅可以像回溯发那样找一个解,也可以像状态空间搜索那样找一条路径
诶及分数问题
分析:
解决方案是采用迭代加深搜索,从小到大枚举深度上限maxd,每次执行只考虑深度不超过maxd的结点。此过程中还可以继续剪枝
int ok=0;for(maxd=1;;maxd++){ memset(ans,-1,sizeof ans); if(dfs(0,get_first(a,b),a,b)) {ok=1; break; }}//其中get_first(a,b)是满足1/c<=a/b的最小C,迭代加深搜索过程如下//如果当前解V比目前最有解更优,更新ansbool better(int d){ for(int i=d;i>=0;i--) if(v[i]!=ans[i]){ return ans[i]==-1||v[i]<ans[i]; } return false;}//当前深度为d,分母不能小于from,分数之和恰好为aa/bbbool dfs(int d,int from,LL aa,LL bb){ if(d==maxd){ if(bb%aa) return false; v[d]=bb/aa; if(better(d)) memcpy(ans,v,sizeof(LL)*(d+1)); return true; } bool ok=false; from=max(from,get_first(aa,bb)); //枚举的起点 for(int i=from; ;i++){ //剪枝:如果剩下的maxd+1-d个分数全部都是1/i,加起来仍然不超过aa/bb,则无解 if(bb*(maxd+1-d)<=i*aa) break; v[d]=i; //计算aa/bb-1/i,设结果为a2/b2 LL b2=bb*i; LL a2=aa*i-bb; Ll g=gcd(a2,b2); //以便约分 if(dfs(d+1,i+1,a2/g,b2/g)) ok=true; } return ok;}
0 0
- 7.6迭代加深搜索
- 迭代加深搜索
- 迭代加深搜索
- 搜索-迭代加深
- 迭代加深搜搜索
- poj3134迭代加深搜索
- 迭代加深搜索初步
- UVa_11212(迭代加深搜索)
- 搜索专题小结:迭代加深搜索
- 埃及分数 迭代加深搜索 IDS
- 迭代加深搜索 埃及分数
- 迭代加深ID-DFS搜索算法
- 埃及分数,迭代加深搜索
- poj2870Light Up(迭代加深搜索)
- USACO/fence8 迭代加深搜索+剪枝
- 迭代加深搜索 + dp vijos 1159
- UVA 1374 迭代加深搜索
- 埃及分数(迭代加深搜索)
- 锡兰这里除了雪什么都有
- 起床困难综合症(省选)
- web前端开发培训之前端开发必会的二十五个知识点
- Python中datetime的使用和常用时间处理
- python 技巧(五)迭代器
- 7.6迭代加深搜索
- 包含中文字符的QString对象转换为python的string对象的方法
- uva 136 丑数
- 蓝桥杯-数列特征
- 欢迎使用CSDN-markdown编辑器
- Babel6.x的安装
- Dynamic Library Sample with CMake on Windows
- Java中的IO流修改
- web开发的性能准则(减少页面加载时间方面)