【NOI2005】【DLX】智慧珠游戏(code)

首先吐槽题目名称:


我想了好久zhzyx是什么...跪跪跪跪跪跪

然后写了个弱B的搜索样例都要2.5s 跪跪跪跪跪跪

然后学了N久的DLX..跪跪跪跪跪跪


总之给邓大牛跪了!膜拜瞬秒DLX的!


Introduction:

之所以叫DLX是因为像跳舞?(雾)

但无论如何Dancing Links is a useful tool which is used to solve a kind of problem called 'exact cover'.

See the PDF here (Chinese ver.)


So how can we use it in this problem? (NOI2005 zhzyx)


其实很简单,但是如果你是第一次做此类题目,那你肯定会很难想到。

把每一个未被覆盖的点(x,y)转化成矩阵的一列,每一种零件的每一种可能的摆放形式转化为占矩阵中的一行, 把其占用的(x,y)格子标记为1,然后再把所有还没有固定的零件每个做一列,把所有属于该基本零件的摆放方式的行标记为1。

所以您大概就知道怎么做了吧..(恕我表达能力有限吧)


然后具体的步骤请看论文吧。


给个code(注意赋初值,你要先考虑一下(0, 0)的编号)


#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<climits>
#include<cmath>
#include<cctype>
#include<bitset>
using namespace std;

const int tt[61][6][2] =
{
	{
  {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}},
	{
  {3, 0}, {0, 0}, {0, 1}, {1, 0}, {0, 0}, {0, 0}},
	{
  {3, 0}, {0, 0}, {0, 1}, {1, 1}, {0, 0}, {0, 0}},
	{
  {3, 0}, {0, 0}, {1, 0}, {1, 1}, {0, 0}, {0, 0}},
	{
  {3, 0}, {0, 1}, {1, 0}, {1, 1}, {0, 0}, {0, 0}},
	{
  {4, 0}, {0, 0}, {0, 1}, {0, 2}, {0, 3}, {0, 0}},
	{
  {4, 0}, {0, 0}, {1, 0}, {2, 0}, {3, 0}, {0, 0}},
	{
  {4, 0}, {0, 0}, {0, 1}, {0, 2}, {1, 0}, {0, 0}},
	{
  {4, 0}, {0, 0}, {0, 1}, {0, 2}, {1, 2}, {0, 0}},
	{
  {4, 0}, {0, 0}, {1, 0}, {1, 1}, {1, 2}, {0, 0}},
	{
  {4, 0}, {0, 2}, {1, 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值