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. MySQL字符集设置及字符转换(latin1转utf8)

    MySQL字符集设置及字符转换(latin1转utf8) http://blog.chinaunix.net/uid-25266990-id-3344584.html  MySQL字符集设置及字符转换 ...

  2. my.cnf 详解

    [client] port =3306 socket =/tmp/mysql.sock [mysqld] port =3306 socket =/tmp/mysql.sock basedir =/us ...

  3. [py][mx]django get方法返回login页面

    get方法返回login.html users/views.py def login(request): if request.method == "POST": pass eli ...

  4. Android中Activity的四种开发模式

    Activity的四种启动模式:standard.singleTop.singleTask.singleInstance   清单文件中的Activity配置使用:android:launchMode ...

  5. PHP中header('content-type:text/html;charset="utf-8')和error_reporting()的作用

    1.header PHP文件插入header("Content-type: text/html; charset=utf-8");相当于页面里面的<meta http-equ ...

  6. EXTJS 4:在renderer中如何控制一个CheckColumn的行为,如显示,只读等属性

    在编写grid下的column时,大家肯定会经常用到renderer这个方法来改变文字的呈现形式,那么如果该column是一个特殊的column,比如CheckColumn时,该方法应该怎样写呢?官方 ...

  7. Linux (RHEL)修改时区

    1.修改配置文件修改为上海时区 vi /etc/sysconfig/clock ZONE="Asia/Shanghai" 2.创建上海时区的软连接 ln -sf /usr/shar ...

  8. STA分析(六) cross talk and noise

    在深亚微米技术(deep submicron)中,关于crosstalk和noise对design的signal integrate的影响越来越大.主要表现在glitch和对delay的影响. 1)m ...

  9. 奋斗史-IT女生是怎样炼成的

    IT女生的奋斗史 终于来到了毕业季,感觉有点伤感! 记得11年来到大学的时候,还是那么懵懂,什么都不懂,几乎连电脑的基本操作都不会!自己小时候虽然家里穷,但是从小就觉得“软件”是个很神奇的东西,很了不 ...

  10. ASP.NET控件--DropDownList

      设置默认值:DropDownList1.Items[i].Selected=true;绑定:DropDownList1.DataSource = dataSet.Tables["Tabl ...