
IDA*
BEconfidence
坚持才是胜利之道
展开
-
UVa1603 - Square Destroyer
题意:给定一个火柴棒拼成的方格阵,然后去掉一些火柴棒,问至少再去掉几根火柴棒能够让图中一个正方形都没有。思路:1. 由于题目中给定了 n 的范围,2 * n * (n + 1) 所以能够保证所有的火柴用 __int64 的位运算表示;2. 问题的关键在于如何生成火柴构成的方阵,以及生成方阵之后如何去搜索;3. 启发式函数 h 的计算需要考量:如果删除了某个原创 2015-04-29 21:22:49 · 1787 阅读 · 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 · 1046 阅读 · 0 评论 -
UVa11212 - Editing a Book
#include#include#includeusing 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 · 1017 阅读 · 0 评论 -
12558 - Egyptian Fractions (HARD version)
#include#include#include#includeusing 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 · 1039 阅读 · 2 评论 -
UVa11214 - Guarding the Chessboard
给出m*n棋盘上的目标点,求最少用几个皇后可以守卫所有目标点。 类似八皇后做法,2维数组标记行、列、主对角线、副对角线。 有个加速的技巧,测试之后发现10*10的棋盘全部守卫至少需要5个,所以上限就是5,当maxd等于5时直接输出,不进行搜索。#include#includeusing namespace std;const int maxn=11;int n,m,t,maxd原创 2015-05-03 13:08:35 · 2133 阅读 · 0 评论 -
UVa1343 - The Rotation Game
因为8个转轮对应的位置比较没有规律,需要提前将这些位置存在数组中,方便旋转操作和回溯法的归位操作。利用数组来人为储存没有规律的数字。IDA*合了bfs步数最少和dfs字典序最小的优点。#include#include#define maxn 500using namespace std;int block[24];int roller[8][7]={{0,2,6,1原创 2015-04-28 13:38:54 · 1103 阅读 · 0 评论