题意 : 有 n 个城市 , m个站 , 你要选择 k 个站 , 每个站画一个半径为 r 的圆 , 可以覆盖所有的城市 , 一个城市可以被多个站覆盖 。求的是满足要求的最小的 r 。
思路很明显了 , 首先是二分 , 将问题转化成可行性判定的问题 。
那么对于 mid , 我们将 站看成行 , 将城市看成 列 , 如果一个站和一个城市的距离小于mid , 那么对应的矩阵位置的值就1 , 否则是...
分类:
其他好文 时间:
2014-10-03 23:38:09
阅读次数:
193
题意 : 给你一个大小为 n * m 的矩形 , 坐标是( 0 , 0 ) ~ ( n , m ) 。然后给你 p 个小矩形 , 坐标是( x1 , y1 ) ~ ( x2 , y2 ) , 你选择最小的几个矩形 , 使得这些矩形可以覆盖整个矩形 , 并且互相不会重叠 。( n , m
思路 : Dancing Links 的精确覆盖问题 。
我们将 n * m 的矩形分成 n * m ...
分类:
其他好文 时间:
2014-10-03 23:13:35
阅读次数:
340
利用 Dancing Link 来解数独
具体的可以看 lrj 的训练指南 和 《 Dancing Links 在搜索中的应用 》这篇论文
Dancing Link 来求解数独 , 是通过求解精确覆盖
精确覆盖就是给出一个 01 矩阵 , 要求我们选择一些行 , 使得每一列有且仅有一个 1
对于数独问题 , 行就是我们的选择 , 即在第 i 行 第 j 列 放上 数字...
分类:
其他好文 时间:
2014-09-30 02:38:51
阅读次数:
362
题目大意:给定一个10*10的三角形棋盘和12种零件,每种零件只能放一次,可以旋转和翻转,一些零件已经放在了上面,求一种方案,使12个零件无重叠地放在棋盘上
首先这题目一看就是DLX 但是建图真心恶心 需要枚举每一个零件的最多八个朝向的所有位置 我一开始想要全部代码处理 但是后来发现真做不了
于是我选择了打表录入12个零件的所有60种朝向,选择第一排最左面的点作为基点,依次得出每个点关于基点的...
分类:
其他好文 时间:
2014-09-05 13:00:51
阅读次数:
320
题目大意:。。还是数独,不同的是原先的九宫格约束条件变为了给定的任意形状。。。
我们跑一遍floodfill 得出每一个格子属于哪一个形状
然后就是裸的数独了
这题T
好不容易改完了 尼玛 交上去就WA
最后发现当找到一组解之后 一定要把当前的数独转移到ANS数组中 否则就会被覆盖 导致输出时错误
#include
#include
#include
#include
usin...
分类:
其他好文 时间:
2014-09-04 19:08:10
阅读次数:
215
题目大意:。。。。数独还用我说么
首先一般的解法都是爆搜,爆搜的话绝对懒得做。。于是我作死去学了Dancing-Links数据结构优化的X算法,简称DLX算法
Dancing-Links虽然名字好听,但是其实实质就是双向十字链表。。但是由于调试的时候各种挂,指针还看着及其闹心(经常调试链式结构的人一定深有同感),所以只能在调试区各种加指针删指针,来回飞舞的指针,即Dancing-Links。。...
分类:
其他好文 时间:
2014-09-04 15:03:29
阅读次数:
300
题目:http://poj.org/problem?id=2676题意:数独,每行1-9,每列1-9,每3*3小格1-9,填数,不能重复方法:Dancing Links(16ms)或者DFS暴搜(400-900ms)Dancing Links(DLX) 是为了解决矩阵精确覆盖问题的算法,算法效率非常...
分类:
其他好文 时间:
2014-09-02 14:07:34
阅读次数:
225
思路:这题挺好的,本来模板不是自己敲的嘛,理解了Dancing Links后是找了一个模板的,然后正好这题让自己加深理解了,也知道在实际中怎么建矩阵求解了。
把n*m的矩阵看成n*m个格子,像那个数独一样,作为n*m列;每一个矩形一行。
行列都建好矩阵后,就可以用舞蹈链求解了。
问题即转化为从这些行中选择最少的一部分使每一列被覆盖且仅覆盖一次。
#pragma comment(li...
分类:
其他好文 时间:
2014-08-29 21:25:42
阅读次数:
285
题目大意:16*16的数独。思路分析:多说无益.想说的就是dancing links 的行是依照第一行第一列填 1第一行第二列填 2……第一行第十五列填15第一行第二列填 1……第二行。。。。列的纺织则是第一行放1,第一行放2,。。第十六行放16.。。第一列放1.。第一列放2.。。第十六列放16.。...
分类:
其他好文 时间:
2014-08-23 12:33:30
阅读次数:
264
#include
#include
#include
using namespace std;
struct Data
{
void assign(int x,int y,int z)
{
row=x;
col=y;
val=z;
}
int row,col,val;
} data[730];
struct Node
...
分类:
其他好文 时间:
2014-08-15 16:02:29
阅读次数:
1129