首先给一个传送门,是我写的精确覆盖问题,也是DLX。
http://blog.csdn.net/vmurder/article/details/40586647
然后再给一个传送门,是这道题的POJ位置。
http://poj.org/problem?id=1084
然后开始说正事。
题意:
多组数据,第一个数是数据个数。
题意就是给出一个n*n的大网格,然后它由一系列的火柴拼成,题中给的图片是第二组测试数据。
现在我们已经删掉了若干个火柴,问至少还需要删掉多少火柴,才能使图中的若干个正方形全部被破坏。
解析:
每个正方形都需要有其上的至少一根火柴被选,那么就转化成了DLX模型。每行是一跟火柴,每列是一个正方形,当然正方形个数是<=5*5+4*4+3*3+2*2+1*1=55的,然后显然若某行这根火柴在某列的正方形中,则new一个节点。这样就可以直接套DLX模版(重复覆盖的模版)求解了。
题解:
跟简单覆盖基本一样,但是深刻理解一下就可以知道,简单覆盖时删除操作是先删列,然后枚举行,跟行有关的列也删掉,每深一层都是经过两次(好吧,你说是一次+for(若干次)我也同意)删除操作。