IDA*
BEconfidence
坚持才是胜利之道
展开
-
UVa1603 - Square Destroyer
题意: 给定一个火柴棒拼成的方格阵,然后去掉一些火柴棒,问至少再去掉几根火柴棒能够让图中一个正方形都没有。 思路: 1. 由于题目中给定了 n 的范围,2 * n * (n + 1) 所以能够保证所有的火柴用 __int64 的位运算表示; 2. 问题的关键在于如何生成火柴构成的方阵,以及生成方阵之后如何去搜索; 3. 启发式函数 h 的计算需要考量:如果删除了某个原创 2015-04-29 21:22:49 · 1763 阅读 · 1 评论 -
埃及分数问题
样例输入:495 499 样例输出:495/499 = 1/2+1/5+1/6+1/8+1/3992+1/14970 规则是加数少比加数多好,加数相同,小的数越大越好。 分析:回溯无限,宽度优先便利一层都跑不完,所以用迭代加深搜索(iterative deeping):从小到达枚举深度上线maxd,枚举上限还可以减枝。 IDA*算法:深度上线maxd,当前节点n的深度为g(n),乐观估价原创 2015-04-27 14:03:35 · 1028 阅读 · 0 评论 -
UVa11212 - Editing a Book
#include #include #include using namespace std; class Board { public: int a[16]; int h; int n; bool readIn() { int i; scanf("%d",&n); if(n == 0) return fals原创 2015-04-27 15:57:08 · 993 阅读 · 0 评论 -
12558 - Egyptian Fractions (HARD version)
#include #include #include #include using namespace std; typedef long long LL; const int maxn=10010; int maxd,t,tt; set sk; LL ans[maxn],v[maxn]; LL gcd(LL a,LL b){ return b?gcd(b, a%b):a; } LL ge原创 2015-04-27 23:11:27 · 1021 阅读 · 2 评论 -
UVa11214 - Guarding the Chessboard
给出m*n棋盘上的目标点,求最少用几个皇后可以守卫所有目标点。 类似八皇后做法,2维数组标记行、列、主对角线、副对角线。 有个加速的技巧,测试之后发现10*10的棋盘全部守卫至少需要5个,所以上限就是5,当maxd等于5时直接输出,不进行搜索。 #include #include using namespace std; const int maxn=11; int n,m,t,maxd原创 2015-05-03 13:08:35 · 2111 阅读 · 0 评论 -
UVa1343 - The Rotation Game
因为8个转轮对应的位置比较没有规律,需要提前将这些位置存在数组中,方便旋转操作和回溯法的归位操作。 利用数组来人为储存没有规律的数字。 IDA*合了bfs步数最少和dfs字典序最小的优点。 #include #include #define maxn 500 using namespace std; int block[24]; int roller[8][7]={ {0,2,6,1原创 2015-04-28 13:38:54 · 1078 阅读 · 0 评论