题意:

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

思路:

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. HDU 1695 GCD 欧拉函数+容斥定理

    输入a b c d k求有多少对x y 使得x在a-b区间 y在c-d区间 gcd(x, y) = k 此外a和c一定是1 由于gcd(x, y) == k 将b和d都除以k 题目转化为1到b/k 和 ...

  2. Effective C++:条款35:考虑virtual函数以外的其它选择

    游戏中的人物伤害值计算问题. (一)方法(1):一般来讲能够使用虚函数的方法: class GameCharacter { public: virtual int healthValue() cons ...

  3. 【中途相遇+二进制】【NEERC 2003】Jurassic Remains

    例题25  侏罗纪(Jurassic Remains, NEERC 2003, LA 2965) 给定n个大写字母组成的字符串.选择尽量多的串,使得每个大写字母都能出现偶数次. [输入格式] 输入包含 ...

  4. 你想不到的IT运维前途

    本人一毕业就走上了IT系统运维的道路,我之所以踏上这条路并一直坚持了下来,因为觉得运维工作并非一味关注技术,而是关注包括技术在内的更综合的解决方案,也就是说,做运维,自己要学的知识面更广,考虑问题要更 ...

  5. F - The Circumference of the Circle

    Description To calculate the circumference of a circle seems to be an easy task - provided you know ...

  6. 从汇编看c++成员函数指针(三)

    前面的从汇编看c++中成员函数指针(一)和从汇编看c++成员函数指针(二)讨论的要么是单一类,要么是普通的多重继承,没有讨论虚拟继承,下面就来看一看,当引入虚拟继承之后,成员函数指针会有什么变化. 下 ...

  7. j2ee基础

    1.tomcat端口被占用解决方式 使用netstat -anb查看哪个进程占用,禁止掉 修改tomacat使用的端口,在配置文件conf/server.xml 2.web app目录 3.如何建立虚 ...

  8. Android url中文编码问题

    最近项目遇见一个很奇葩问题,关于URL问题,项目中加载图片,图片的URL含有中文,但是,我的手机可以加载,没问题,同事也都可以,但是测试手机却不可以,加载失败,找到问题,就是URL含有中文问题. 解决 ...

  9. Git for PyCharm

    Git for PyCharm Using PyCharm's Git integration locally:http://confluence.jetbrains.com/display/PYH/ ...

  10. ZOJ问题--hdu3788

    ZOJ问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...