题意:

  给定一个火柴棒拼成的方格阵,然后去掉一些火柴棒,问至少再去掉几根火柴棒能够让图中一个正方形都没有。

思路:

1. 由于题目中给定了 n 的范围,2 * n * (n + 1) <= 60 -> 所以能够保证所有的火柴用 long long的位运算表示;

2. 启发式函数 h 的计算需要考量:如果删除了某个方阵的一个边,则能够保证 h(s1) <= h(s2) + C(s1, s2),其中 C(s1, s2) = 1,h(s1) - h(s2) <= 1;

3. 各种位运算的范围要明确,如 1<<i 前面要加上long long 修饰方能得到正确的结果

代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int INFS = 0x7fffffff;
int N,C,E,bound;
long long squ[100],xiao[6][6];
bool flag;
long long get2(int i)
{
return ((long long)1<<(i-1));
}
int getnumber1(int i,int j)
{
return (2*N+1)*(i-1)+j;
}
int getnumber2(int i,int j)
{
return (2*N+1)*(i-1)+j+N;
}
void build()
{
C=0;
memset(xiao,0,sizeof(xiao));
int i,j;
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
{
xiao[i][j]|=get2(getnumber1(i,j))|get2(getnumber1(i+1,j));
xiao[i][j]|=get2(getnumber2(i,j))|get2(getnumber2(i,j+1));
squ[C++]=xiao[i][j];
}
for(int size=2;size<=N;size++)
{
for(i=1;i+size-1<=N;i++)
{
for(j=1;j+size-1<=N;j++)
{
squ[C]=0;
for(int a=0;a<size;a++)
{
for(int b=0;b<size;b++)
{
squ[C]^=xiao[i+a][j+b];;
}
}
C++;
}
}
}
}
int dfs(long long state,int de)
{
int h=0;
long long u=0,s=state;
for(int i=0;i<C;i++)
{
if((s&squ[i])==squ[i])
{
h+=1;
s^=squ[i];
if(u==0)
u=squ[i];
}
}
if(h==0)
{
flag=true;
return de;
}
if(de+h>bound)
return de+h;
int news=INFS;
for(int i=1;i<=E;i++)
{
if(u&get2(i))
{
int b=dfs(state^get2(i),de+1);
if(flag)
return b;
news=min(b,news);
}
}
return news;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&N);
build();
E=2*N*(N+1);
int k;
long long state=((long long)1<<E)-1;
scanf("%d",&k);
for(int i=0;i<k;i++)
{
int x;
scanf("%d",&x);
state^=get2(x);
}
flag=false;
bound=0;
while(!flag)
{
bound=dfs(state,0);
}
printf("%d\n",bound);
}
}

UVA 1603 Square Destroyer的更多相关文章

  1. UVA - 1603 Square Destroyer (DLX可重复覆盖+IDA*)

    题目链接 给你一个n*n的由火柴组成的正方形网格,从中预先拿掉一些火柴,问至少还需要拿掉多少火柴才能破坏掉所有的正方形. 看到这道题,我第一反应就是——把每根火柴和它能破坏掉的正方形连边,不就是个裸的 ...

  2. UVA 11542 - Square(高斯消元)

    UVA 11542 - Square 题目链接 题意:给定一些数字.保证这些数字质因子不会超过500,求这些数字中选出几个,乘积为全然平方数,问有几种选法 思路:对每一个数字分解成质因子后.发现假设要 ...

  3. (中等) POJ 1084 Square Destroyer , DLX+可重复覆盖。

    Description The left figure below shows a complete 3*3 grid made with 2*(3*4) (=24) matchsticks. The ...

  4. UVa 11461 - Square Numbers【数学,暴力】

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  5. 7-15 Square Destroyer 破坏正方形 uva1603

    先是处理所有的正方形 从边长为1开始 将其边存好 满边存好 然后不断扫描正方形  并且进行拆除  直到拆完或者 步数小于等于9(启发方程  因为n小于等于5  九次足以将所有的拆完) 代码实施有很多细 ...

  6. UVA 11461 - Square Numbers 数学水题

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  7. xor方程组消元 UVA 11542 Square

    题目传送门 题意:给n个数,选择一些数字乘积为平方数的选择方案数.训练指南题目. 分析:每一个数字分解质因数.比如4, 6, 10, 15,, , , , 令,表示选择第i个数字,那么,如果p是平方数 ...

  8. UVA 11461 - Square Numbers(水题)

    题目链接 #include <cstdio> #include <cstring> #include <string> #include <cmath> ...

  9. UVA 11461 - Square Numbers

    题目:统计区间中的平方数个数. 分析: ... #include <stdio.h> #include <string.h> ]; int main() { int i, a, ...

随机推荐

  1. Akka边学边写(2)-- Echo Server

    EchoServer 上篇文章里,我们用Akka写了一个简单的HelloWorld样例,对Akka(以及Actor模式)有了初步的认识.本文将用Akka写一个EchoServer,看看在Actor的世 ...

  2. .Net插件编程模型:MEF和MAF[转载]

    .Net插件编程模型:MEF和MAF MEF和MAF都是C#下的插件编程框架,我们通过它们只需简单的配置下源代码就能轻松的实现插件编程概念,设计出可扩展的程序.这真是件美妙的事情! 今天抽了一点时间, ...

  3. 忘记root密码修改方法

    好吧,不想重新装(那耗费的时间真心伤不起…),找修改root密码的方法,结果还真找到了… 首先在虚拟机启动时,在Grub界面按“e”进入编辑 在linux /vmlinuz那行后面添加“init=/b ...

  4. LINQ 之四 (SkipWhile和TakeWhile)

    看到书上的例子很正常,于是,我写了个不正常一点的. 书上的是这样的 class Program { static void Main(string[] args) { ,,,,,,,,}; ); fo ...

  5. Asp.Net Identity自定义user类的运用,ClaimsIdentity

    mvc5自动生成的用户验证是比较好用的,还可以扩展,可是要求code first,目前使用sqlite,支持entity framework,但不支持code first. 只有自已简单模仿一下了.经 ...

  6. F, A, MS, QM, RF的OFFER和经历 -- Final update

    昨天收到FB的电话,我的OFFER已经批下来了,这也意味着我的JOB HUNTING结束了,下 面是我这两个月来申请结果汇总: Applications (7): Facebook, Google, ...

  7. C# 和Java的foreach的不同用法

    循环语句为苦逼的程序猿们提供了很大的便利,有while.do...while.for和 foreach.而且foreach语句很简洁,但是它的优点不仅仅在于此,它的效率也是最高的. 作为两个开发语言, ...

  8. Core Bluetooth 概述 【官方文档翻译】

    Core Bluetooth 框架在Mac和iOS平台,为配备了低功耗蓝牙无线技术的设备提供了进行通信所需要的类.例如,您的应用程序可以发现,探索,和低功耗的外围设备进行交互,如心率监视器.数字温控器 ...

  9. struts1:Struts配置文件初解

    struts-config.xml是Struts的核心文件.该文件可配置各种组件,包括,FormBeans,Actions,ActionMappings,全局转发GlobalForwards,数据源D ...

  10. 在world中批量调整图片的大小

    1.Alt+F8调出vb宏  创建一个宏名字,setsize 粘贴代码后保存关闭. Sub setsize() ' ' setsize 宏 ' ' Dim iSha As InlineShape Fo ...