这一道题和HDU2295是一样 是一个dancing links重复覆盖解决最小支配集的问题 在给定长度下求一个最小支配集,只要小于k就行 然后就是二分答案,每次求最小支配集 只不过HDU2295是浮点,这里是整数 我写的一个比较暴力 #include<cstdio> #include<cstring> #include<queue> #include<cstdlib> #include<algorithm> #include<vector…
以下转自 这里 : 最小支配集问题:二分枚举最小距离,判断可行性.可行性即重复覆盖模型,DLX解之. A*的启发函数: 对当前矩阵来说,选择一个未被控制的列,很明显该列最少需要1个行来控制,所以ans++. 该列被控制后,把它所对应的行,全部设为已经选择,并把这些行对应的列也设为被控制.继续选择未被控制的列,直到没有这样的列. #include <cstdio> #include <cstring> #include <cstdlib> #include <cma…
分析: dlx重复覆盖的巧用,重复覆盖的原理恰好符合本题的筛选方式,即选择一个数后,该数的倍数或约数可以保证在之后的搜索中不会被选择 于是修改一下启发函数,求解最大的重复覆盖即可.   其实不一定不被选择,只是选择以后,要么达不成目标,要不达到目标,也不如不选择更优   举下面的例子 3 2 3 6 答案一看就是 2 初始的dancing links的表示是这样的       2   3   6 2    1   0   1 3    0   1   1 6    1   1   1 然后肯定先…
就是dancing links 求最小支配集,重复覆盖 精确覆盖时:每次缓存数据的时候,既删除行又删除列(这里的删除列,只是删除表头) 重复覆盖的时候:只删除列,因为可以重复覆盖 然后重复覆盖有一个估价函数,这个函数很强大,可以进行强力剪枝 这个估价函数的意思是,搜索到当前时,至少还需要删除几行,就可以完全覆盖了 这个至少得意思是最优删: 选择一列,假设覆盖这一列的有许多行,假设这些行覆盖的所有列都是一行覆盖的,然后记录数量 然后重复操作,直到全部覆盖,所以这个数量就是最少要的数量 (估价函数很…
今年上海网络赛的一道题目 , 跟 HDU 2295 如出一辙 . 就是距离的计算一个是欧几里得距离 , 一个是曼哈顿距离 学完DLX感觉这题好水 ,就是一个裸的反复覆盖 注意下别溢出即可了 #include <stdio.h> #include <string.h> #include <algorithm> #include <vector> #include <math.h> #include <stdlib.h> using na…
分析:每次可以打一个小矩阵的怪,然后把每个怪看成一列,然后每个小矩阵看成一行,枚举左上角就行 注:然后注意总共的节点数是新图的行*列的个数,不是原图 #include<cstdio> #include<cstring> #include<queue> #include<cstdlib> #include<algorithm> #include<vector> #include<cmath> using namespace…
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5046 题意:要在n个城市里建造不超过k个机场覆盖所有城市,问机场城市之间最大距离最小为多少. 分析:二分距离+DLX判断,n个城市n列,然后n行,每行城市i在二分的距离内能到达列j就标为1,问题转化为选不超过k行来覆盖所有列(可重复覆盖). 注意:最大距离为4*1e9,爆int了,要用long long,不然会TLE... #include <cstdio> #include <cstrin…
题目请戳这里 题目大意:一个城市n个点,现在要建m个消防站,消防站建在给定的n个点中.求建m个消防站后,m个消防站要覆盖所有的n个点的覆盖半径最小. 题目分析:重复覆盖问题,DLX解决.不过要求覆盖半径最小,需要二分.虽然给的范围并不大,DLX毕竟还是暴力搜索,而且精度有6位小数,因此直接二分距离的话会TLE!解决方案是将图中任意2点的距离记录下来,去重后二分已知的距离.因为消防站建在给定的n个点中,那么最小覆盖半径一定在任意2点距离中产生. DLX搜索的时候,一般习惯删除的时候从左往右,不过效…
原文链接:http://sqybi.com/works/dlxcn/ (只转载过来一部分,全文请看原文,感觉讲得很好~)正文    精确覆盖问题    解决精确覆盖问题    舞蹈步骤    效率分析    应用于六形组    一个失败的试验    应用于四形条    应用于皇后问题    结语    致谢    历史注记    程序正文 我写这篇论文的目的,是觉得这个简单的程序技巧理应得到广泛认可.假设x指向双向链的一个节点:L[x]和R[x]分别表示x的前驱节点和后继节点.每个程序员都知道如…
hiho一下第102周的题目. 原题地址:http://hihocoder.com/problemset/problem/1321 题意:输入一个9*9数独矩阵,0表示没填的空位,输出这个数独的答案. 提示已经讲解的很清楚了.稍微整理下思路.最后附AC代码. 一.Dancing Links解决精确覆盖问题.      1.精确覆盖问题         给定一个n行,m列的01矩阵.从中选择若干行使得每一列有且恰好只有一个1. 例如: 答案是选择2,3,4行. 2.DancingLinks求解精确…