链接:

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

题意:

有一个 n*n(n<20)的座位矩阵里坐着k(k≤26)个研究小组。
每个小组的座位都是矩形形状。输入每个小组组长的位置和该组的成员个数,找到一种可能的座位方案。

分析:

深搜 + 剪枝,以矩形为搜索对象,每一层选择一个尚未放置字母的位置,作为矩形的左上角,向行和列依次扩展。

如果选择的矩形中只有一个小组,且其面积等于小组的成员个数,则在这个矩形内放置字母,然后递归下一层。

矩形的面积应不超过 9,在向列扩展的过程中可以对列的范围进行剪枝,具体见代码。

代码:

 #include <cstdio>
#include <cstring> int n, k;
char seat[][], ans[][]; bool dfs(int id, char ch){
while(ans[id/n][id%n] != '.') id++;
if(id == n * n) return true;
int sr = id / n, sc = id % n, ec = n;
for(int r = sr; r < n; r++){
for(int c = sc; c < ec; c++){
if(ans[r][c] != '.') { ec = c; break; }
int sum = (r - sr + ) * (c - sc + );
if(sum > ) { ec = c; break; }
int digit = ;
bool valid = true;
for(int t = sr; t <= r; t++){
for(int i = sc; i <= c; i++){
if(seat[t][i] != '.'){
if(digit != ){ valid = false; break; }
digit = seat[t][i] - '';
}
}
if(!valid) break;
}
if(!valid) { ec = c; break; }
if(digit < sum) { ec = c; break; }
if(digit > sum) continue;
for(int t = sr; t <= r; t++){
for(int i = sc; i <= c; i++) ans[t][i] = ch;
}
if(dfs(id + c - sc + , ch + )) return true;
for(int t = sr; t <= r; t++){
for(int i = sc; i <= c; i++) ans[t][i] = '.';
}
}
}
return false;
} int main(){
while(scanf("%d%d", &n, &k) && n){
memset(ans, '.', sizeof(ans));
for(int r = ; r < n; r++) scanf("%s", seat[r]);
dfs(, 'A');
for(int r = ; r < n; r++){
for(int c = ; c < n; c++) printf("%c", ans[r][c]);
printf("\n");
}
}
return ;
}

总结:

搜索对象的选取很重要,若选取不当,则会运行超时。

UVa 11846 - Finding Seats Again的更多相关文章

  1. hdu1937 Finding Seats

    hdu1937 Finding Seats 题意是 求最小的矩形覆盖面积内包含 k 个 空位置 枚举上下边界然后 双端队列 求 最小面积 #include <iostream> #incl ...

  2. HDU 1937 F - Finding Seats 枚举

    F - Finding Seats Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  3. hdu 1937 Finding Seats

    Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  4. Soj题目分类

    -----------------------------最优化问题------------------------------------- ----------------------常规动态规划 ...

  5. 杭电ACM分类

    杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...

  6. 转载:hdu 题目分类 (侵删)

    转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...

  7. UVA 1456 六 Cellular Network

    Cellular Network Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit S ...

  8. 图-用DFS求连通块- UVa 1103和用BFS求最短路-UVa816。

    这道题目甚长, 代码也是甚长, 但是思路却不是太难.然而有好多代码实现的细节, 确是十分的巧妙. 对代码阅读能力, 代码理解能力, 代码实现能力, 代码实现技巧, DFS方法都大有裨益, 敬请有兴趣者 ...

  9. uva 315 Network(无向图求割点)

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

随机推荐

  1. [AHOI2008] 紧急集合

    Description 欢乐岛上有个非常好玩的游戏,叫做"紧急集合".在岛上分散有N个等待点,有N-1条道路连接着它们,每一条道路都连接某两个等待点,且通过这些道路可以走遍所有的等 ...

  2. ASP.NET上传时间超过4M失败(超时)的解决方法

    https://blog.csdn.net/shan1774965666/article/details/20836851 在web.config中的<system.web></sy ...

  3. sqlserver 级联删除、级联更新

    增加外键约束时,设置级联更新.级联删除:[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ][ ON UPDATE { NO A ...

  4. Spring中四种实例化bean的方式

    本文主要介绍四种实例化bean的方式(注入方式) 或者叫依赖对象实例化的四种方式.上面的程序,创建bean 对象,用的是什么方法 ,用的是构造函数的方式 (Spring 可以在构造函数私有化的情况下把 ...

  5. 关于CSS3的filter(滤镜) 属性

    修改所有图片或者元素的颜色为黑白 (100% 灰度) DOM{ -webkit-filter: grayscale(100%); /* Chrome, Safari, Opera */ filter: ...

  6. ngx-echarts响应式图表

    一.代码 html代码 <!-- html --> <nz-card style="background-color: #0e0b2a;border: 0px;color: ...

  7. PL/SQL Developer使用小技巧

    1.PL/SQL Developer记住登陆密码         在使用PL/SQL Developer时,为了工作方便希望PL/SQL Developer记住登录Oracle的用户名和密码:    ...

  8. SG Input 软件安全分析之fuzz

    前言 前面介绍了通过静态读代码的方式去发现问题,这里介绍两种 fuzz 目标软件的方式. 相关文件 链接:https://pan.baidu.com/s/1l6BuuL-HPFdkFsVNOLpjUQ ...

  9. 英雄无敌HoMM3-死亡阴影SOD-神之苏醒WOG-封神NABI-MOD等相关文件

    英雄无敌HoMM3:死亡阴影SOD 英雄无敌3之死亡阴影(Heroes of Might and Magic III: Shadow of Death,简记为HoMM III: SOD)发行于1999 ...

  10. css文本属性用法总结

    稍稍总结了下css文本的一些属性用法,自己忘记的时候也可以用来查查,不用去查网站那么麻烦. 下面是部分总结,也希望对其他人有用 文本修饰 (1)text-decoration:  文本修饰(横线) 4 ...