POJ2248-Addition Chains-经典搜索题详解优化
Addition Chains
http://poj.org/problem?id=2248
解题思路
首先我们能够明显看出这题的范围在10以内,于是乎,迭代加深就是理所应当的了;
然后就是剪枝问题:
1.为了使序列快速逼近n,应该把从大到小地枚举 Num[i]与Num[j];
2.因为X[i]+X[j]=X[j]+X[i],所以需要加一个记录,避免重复搜索某一个和;需要注意的是,因为查重针对每个分支生成的序列,故应该在DFS内部
总结
当一个问题的节点分支数很多,且我们能判断出它的层数不大,这时候就可以采用迭代加深的方法进行搜索;
迭代加深 思想的使用场景:
1.搜索树的规模随着层次的深入增长很快;
2.能够确保答案在较浅的节点时;
代码展示
#include<bits/stdc++.h>
using namespace std;
/**/
int num[15];int n;
int m; bool DFS(int lev){//bool类型的返回不能再像void 那样随意了,不必要就不用 if(lev>m){if(num[m]==n)return true;else return false;//!!!!}bool vis[110]={false};for(int i=lev-1;i>=1;i--){for(int j=lev-1;j>=1;j--){if(num[i]+num[j]<=n&&!vis[num[i]+num[j]]&&num[lev-1]<num[i]+num[j]){num[lev]=num[i]+num[j];vis[num[i]+num[j]]=1;if(DFS(lev+1))return true;vis[num[i]+num[j]]=0;}}}return false;
}
int main(){while(cin>>n){num[1]=1;if(n==1)cout<<1<<endl;else {for(int i=2;i<=10;i++){m=i;//memset(vis,0,sizeof(vis));if(DFS(2)){for(int i=1;i<=m;i++)cout<<num[i]<<" ";cout<<endl;break;}}}}return 0;
}
POJ2248-Addition Chains-经典搜索题详解优化相关推荐
- POJ1011-Sticks-经典搜索题详解优化
Sticks http://poj.org/problem?id=1011 解题思路 1.一开始的思路是遍历木棒能组成的所有长度,然后进行许多判断:发现判断过程很复杂,做不了,就换了个思路: 2.遍历 ...
- 剑指offer(26-33题)详解
文章目录 26 二叉搜索树与双向链表 27 字符串的排列 28 数字中出现次数超过一半的数字(待优化)★ 29 最小的K个数 30 连续子数组最大和 31 整数中1出现的次数 32 把数组排成最小的数 ...
- 让理科生沉默,让文科生流泪的综合题详解
让理科生沉默,让文科生流泪的综合题详解 阿布evo 发表于 2011-05-09 21:34 原文地址:http://www.guokr.com/article/31315/ 这套题就是前两天在校内 ...
- 剑指offer(60-67题)详解
文章目录 60 把二叉树打印成多行 61 序列化二叉树 62 二叉搜索树第K个节点 63 数据流中的中位数 64 滑动窗口的最大值 65 矩阵中的路径 66 机器人的运动范围 67 剪绳子 欢迎关注个 ...
- 剑指offer(11-25题)详解
文章目录 11 二进制种1的个数★ 12 数值的正数次方 13 调整数组顺序使奇数位于偶数前面 14 链表中倒数第K个节点 15 反转链表 16 合并两个排序的链表 17 树的子结构 18 二叉树的镜 ...
- 2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2016年 第07届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2020年 第11届 蓝桥杯 第2次模拟赛真题详解及小结【Java版】
蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...
- 2018年 第9届 蓝桥杯 Java B组 省赛真题详解及总结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...
最新文章
- javascript装饰者模式
- 从实例入手,讲解 CMake 的常见用法。demo1-demo8
- [Specification by Example][ch5 Deriving scope from goals]-[读书笔记]-[4]
- 介绍一本好书《海量数据库解决方案》
- 国二python考试系统_分享自己的国二python经历
- foobar2000 正式登陆 iOS/Android
- 数学建模层次分析法例题及答案_数学建模之层次分析法
- 很迷茫,30岁,大专学历,没有一技之长,负债累累,怎么翻身?
- cocos creator编写简易游戏摇杆以及通过摇杆控制精灵移动
- 安全学习木马查杀打卡第二十一天
- Android7.1 亮度自动调节
- unexpected character `w‘ in type specifier 解决方案
- java回车触发按钮_java回车触发按钮的代码
- 迈向人工智能的下一步-《星际争霸II》
- C++虚函数概念及使用(基础)
- 解决-最新版Google谷歌浏览器上传下载卡死无响应-问题
- 什么是render函数?什么时候会用到render函数?
- Oracle创建同义词
- python renamer_Python sys.meta_path方法代码示例
- item_search - 根据关键词获取拼多多商品列表