Dancing Links

 

xqz出的一套题中的一个,没想到是搜索……

一开始不敢写,后来看到何天扬的比std快,他用的是dancing links。为了一探究竟,我也来看看这神奇的dancing links。

看了秋哥面前小菜的Knuth的原文,历经千辛万苦,经历艰难险阻,看了杂七杂八的源码,最后终于写出一个dancing links了……

第一次测,只过了两个点,其余全部tle。一查,发现循环写错了,导致全部死循环……

改了之后,重新测,秒了std……

std用的是IDA*,一开始时用了3.34s,加了启发式函数果然快……瞬间降至0.39s!看来如果不写dancing links,启发式还是要写的。

但是,我的dancing links如果加了启发式,那么,速度0.25s!不愧是knuth!

P.S 这个题刷新了我用for的记录,以前是由APIO的oil保持,22个for,现在升级为26个for!

 

 

原题:

MR.J的地毯

【问题描述】

MR.J刚刚买了一套房子,但有点小瑕疵:有一些地板不美观。于是,他想买一些地毯把不美观的地板遮起来。地毯必须把所有有瑕疵的地板遮起来,而不能遮到没有瑕疵的地板,地毯可以重复覆盖。具体来说,现在有一个n*m01矩阵,如果某个位置是1,则代表它要被覆盖否则不能被覆盖。请你用最少个数的正方形覆盖所有的1可以重复覆盖

【输入格式】

输入包括多组数据,以一组0 0结束。

每组数据的第一行为正整数m,n

接下来一个n*m01矩阵

【输出格式】

对于每组数据,输出最少正方形个数。

【样例输入】

4 3

0 1 1 1

1 1 1 1

1 1 1 1

8 5

0 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 0 1 1 1 1

0 1 1 1 0 1 1 1

0 0

【样例输出】

2

6

【数据说明】

30%:N,M<=10

100%:N,M<=20.数据组数<=5.


  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值