DLX
文章平均质量分 83
NightRaven
cust
展开
-
hust1017 Exact cover DLX模板
题意是一个N*M的01矩阵,选取若干行,使得选取的集合中没列恰好有一个1..精确覆盖的模板题,dancing links的知识可以去 http://blog.csdn.net/sunny606/article/details/7833551 看看,讲的还是挺明白的,或者直接去看Knuth 的论文。这类题模板基本不用怎么动,难点在建表,能把题意转化成精确覆盖的模型就没什么难度了.... #in原创 2014-02-09 19:11:07 · 706 阅读 · 0 评论 -
poj3740 Easy Finding DLX
跟上题差不多,还是一个01矩阵,问是否可以选出若干行使得每列恰有一个1。模型都给建好了,直接建表搜就可以了.. #include #include #include #include #include using namespace std; typedef long long ll; const int maxn=320*320; struct DLX { int col[原创 2014-02-09 23:53:06 · 691 阅读 · 0 评论 -
zoj3209 Treasure Map DLX
一片区域从0 0到 n,m,现有若干个矩形碎片,问最少需要多少个碎片可以不重复的覆盖这片区域。 第一道要自己建模型的题..把格点编号,看做矩阵的列,把每个碎片的编号看成行,这样可以转化成01矩阵中选若干行使得每一列恰有一个1的问题,建好表之后跑一遍DLX就行。因为这题是一行一行的添加的,所以可以省去每行的表头,这么小效率可能会高一点... #include #include u原创 2014-02-12 15:28:30 · 625 阅读 · 0 评论 -
poj3074 9*9数独,poj3076 16*16数独 DLX
两题类似,都是求数独,用DLX解数独最大的问题就是建表..对9*9的数独,建立的是(9*9*9)*(9*9*4)的01矩阵去做的。行表示9*9个格子中,每个格子的9种填法,列的话,得有个9*9表示数字放在第i行第j列,第二个9*9表示在第i行放的数是j,第三个9*9表示在第i列放的数是j,第四个9*9表示在第i个九宫格放的数是j.读取数据的时候,如果某个位置上有数字的话,那么添加一行就可以了(已有原创 2014-02-12 22:48:01 · 1171 阅读 · 0 评论 -
spoj NQUEEN N皇后 DLX
经典N皇后问题,本来是做POJ3239的,结果写完了才发现n最大300..DLX一样会超时,而且那题居然是构造做的...spoj上n最多只有50,而且初始会给出若干个已有皇后的位置。建表时可以建成n*n行*(6*n-2)列的01矩阵,其中行表示每个格子的位置,列的话,前n列n是第i行,下n列是第j列,在下面2*n-1列是左斜线,最后2*n-1列是又斜线。每行恰好有4个1。然后就是去搜了..这题有一原创 2014-02-13 03:45:37 · 1041 阅读 · 0 评论 -
hdu2295 Radar 二分+DLX重复覆盖+A*
N个城市,M个雷达站,最多可开K个雷达工作,给出城市和雷达的坐标,问雷达的工作半径最少为多少可以满足要求? 直接二分距离,判断当前距离K个雷达站是否能覆盖全部城市,判断的时候可以用DLX来搜,建立M行*N列的01矩阵,行表示雷达站,列表示城市,由于允许多个雷达站覆盖一个城市的情况,所以这题跟精确覆盖的实现还不太一样,remove和resume要改一下。另外这题裸上还会TLE,所以在搜索的时候要加原创 2014-02-13 21:07:35 · 765 阅读 · 0 评论 -
SGU224 K皇后 DLX+打表
N*N的棋盘放K个皇后,0<=K<=n*n..之前一直没想好K皇后怎么转化成精确覆盖问题,因为它行列都不一定全部覆盖,而DLX在搜的时候,它是按照一个固定的顺序,一行一行的删除的,后来想了想,枚举到一行的时候,只要能添加一种“不放置”的选择,那么在搜完K行的时候得到的就是一组解。实现的话,不放置的选择对应一个假删除,就是只把矩阵中对应棋盘上该行的一列的列表头删除而矩阵中的内容不变,这样既没有在这这原创 2014-02-14 21:24:22 · 867 阅读 · 0 评论 -
hdu4735 Little Wish~ lyrical step~ DLX重复覆盖
给一棵树,每个节点上有一个男孩或女孩,要求每个女孩节点都有一个距离不超过d的nan原创 2014-09-05 14:05:53 · 595 阅读 · 0 评论