https://vjudge.net/problem/UVA-1603

题意:有一个火柴棍组成的正方形网格,计算至少要拿走多少根火柴才能破坏所有正方形。

思路:从边长为1的正方形开始遍历,将正方形的边长和它的实际火柴数保存起来。之后dfs搜索。

#include<iostream>
#include<cstring>
using namespace std; const int maxn = ; int n, m,best,s;
int map[maxn],size[maxn],fullsize[maxn];
int contins[maxn][maxn]; int row_match(int x, int y) //行
{
return ( * n + )*x + y;
} int col_match(int x, int y) //列
{
return ( * n + )*x + n + y;
} int edges() //计算火柴根数
{
return *n*(n + );
} void init()
{
int ans;
cin >> n >> m;
//初始化网格
for (int i = ; i < edges(); i++)
map[i] = ;
while (m--)
{
cin >> ans;
map[ans - ] = ;
}
s = ; //s用来为正方形编号
memset(contins, , sizeof(contins));
for (int i = ; i <= n;i++) //正方形的边长,从1开始到n
for (int x = ; x <= n - i;x++) //正方形左上角的x坐标
for (int y = ; y <= n - i; y++) //正方形左上角的y坐标
{
size[s] = ;
fullsize[s] = * i; //第s个正方形的边长
//cout << fullsize[s] << "*" << endl;
for (int j = ; j < i; j++)
{
int a = row_match(x, y + j);
int b = row_match(x + i, y + j);
int c = col_match(x + j, y);
int d = col_match(x + j, y + i);
contins[s][a] = ; //储存正方形的边
contins[s][b] = ;
contins[s][c] = ;
contins[s][d] = ;
size[s] += map[a] + map[b] + map[c] + map[d];
}
s++;
}
} int find_sqware()
{
for (int i = ; i < s;i++)
if (fullsize[i] == size[i]) return i; //找到未被破坏的正方形
return -;
} void dfs(int dep)
{
if (dep >= best) return;
int k = find_sqware();
if (k == -) //每个正方形都已经被破坏
{
best = dep;
return;
}
for (int i = ; i < edges(); i++)
{
if (contins[k][i])
{
for (int j = ; j < s;j++)
if (contins[j][i]) size[j]--; //破坏,边的数量减少
dfs(dep + );
for (int j = ; j < s;j++) //回溯
if (contins[j][i]) size[j]++;
}
}
}
int main()
{
//freopen("D:\\txt.txt", "r", stdin);
int t;
cin >> t;
while (t--)
{
init();
best = n*n;
dfs();
cout << best << endl;
}
return ;
}

UVa 1603 破坏正方形的更多相关文章

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

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

  2. 破坏正方形UVA1603

    题目大意 有一个由火柴棍组成的边长为n的正方形网格,每条边有n根火柴,共2n(n+1)根火柴.从上至下,从左到右给每个火柴编号,现在拿走一些火柴,问在剩下的后拆当中ongoing,至少还要拿走多少根火 ...

  3. UVA 11520 填充正方形

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

  4. UVA 1603 Square Destroyer

    题意: 给定一个火柴棒拼成的方格阵,然后去掉一些火柴棒,问至少再去掉几根火柴棒能够让图中一个正方形都没有. 思路: 1. 由于题目中给定了 n 的范围,2 * n * (n + 1) <= 60 ...

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

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

  6. IDA*

    模拟退火 基本思路(Main Thoughts): IDA*是一种优秀的搜索法,在一般的实际问题中,它比普通的搜索更快. 通过迭代加深和估价函数剪枝来搜索. 通常处理没有层数上界或上界很多大的搜索. ...

  7. UVA - 12113 Overlapping Squares(重叠的正方形)

    题意:给定一个4*4的棋盘和棋盘上所呈现出来的纸张边缘,问用不超过6张2*2的纸能否摆出指定的形状. 分析:2*2的纸在4*4的棋盘上总共有9种放置位置,枚举所有的放置位置即可.枚举情况总共种. #p ...

  8. UVA - 1643 Angle and Squares (角度和正方形)(几何)

    题意:第一象限里有一个角,把n(n <= 10)个给定边长的正方形摆在这个角里(角度任意),使得阴影部分面积尽量大. 分析:当n个正方形的对角线在一条直线上时,阴影部分面积最大. 1.通过给定的 ...

  9. UVa 11520 Fill the Square 填充正方形

    在一个 n * n 网格中填了一些大写字母,你的任务是把剩下的格子中也填满大写字母,使得任意两个相邻格子(即有公共边的格子)中的字母不同.如果有多重填法,则要求按照从上到下,从左到右的顺序把所有格子连 ...

随机推荐

  1. Java多线程面试、笔试方向---后续补充

    1.ThreadLocal类     线程级别的局部变量,为每个使用该变量的线程提供一个独立的变量副本,每个线程修改副本时不影响其他线程对象的副本.  ThreadLocal实例通常作为静态私有字段出 ...

  2. hdu3339In Action(最短路+01背包)

    http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=259#problem/H Description Since 1945, whe ...

  3. html03

    快速开发指南:1.新建页面之后,编写外部样式表文件,引入到HTML页面中2.用浏览器打开页面->F12->sources->打开css文件 右边编写样式,左边查看效果3.样式编写完成 ...

  4. BP神经网络原理详解

    转自博客园@编程De: http://www.cnblogs.com/jzhlin/archive/2012/07/28/bp.html  http://blog.sina.com.cn/s/blog ...

  5. cf249D

    这题说的是给了一个n*m的网格,然后每个格子的点事黑色的或者是白色的然后每个点如图所示    然后只能用白点和图中给出的边建立三角形然后询问三角形的个数有多少个,这样说每个三角形的边必须是图中有的边, ...

  6. jboos下载地址记录

    JBoss在2006年被 RedHat 收购.在各种 J2EE 应用服务器中,JBoss 是最受欢迎而且功能最为强大的应用服务器.不过JBoss从8.0开始改名为WildFly,这个新名称在我看来似乎 ...

  7. python基础五--dict

    一.昨日内容回顾 1. 列表: 增 insert:按照指定下标插入 append:在列表最后增加 extend:迭代式的增加到列表的最后,相当于列表扩展 删 pop:根据指定下标删除,返回删除的元素, ...

  8. MySQL数据库----安装

    一.基础部分 1.数据库是什么 之前所学,数据要永久保存,比如用户注册的用户信息,都是保存于文件中,而文件只能存在于某一台机器上. 如果我们不考虑从文件中读取数据的效率问题,并且假设我们的程序所有的组 ...

  9. python 操作 hbase

    python 是万能的,当然也可以通过api去操作big database 的hbase了,python是通过thrift去访问操作hbase 以下是在centos7 上安装操作,前提是hbase已经 ...

  10. P3008 [USACO11JAN]道路和飞机Roads and Planes

    P3008 [USACO11JAN]道路和飞机Roads and Planes Dijkstra+Tarjan 因为题目有特殊限制所以不用担心负权的问题 但是朴素的Dijkstra就算用堆优化,也显然 ...