P2102 地砖铺设(dfs&贪心)

枚举每个点作为正方形左上角进行扩展,只需对左边界和上边界进行判断即可,然后正方形填充。因为要求最小,所以每次就特判右上角的点是否能更小,如果不行就break,否则就继续扩展。

参考代码

#include<bits/stdc++.h>
using namespace std;
char a[502][502];
int n,m,x,y;
bool same(char k,int x,int y)  //判断(x,y)是否可以放入k
{if (x>n||y>m) return false;  //判断有没有越界if (a[x-1][y]==k&&a[x-1][y]) return false;if (a[x+1][y]==k&&a[x+1][y]) return false;if (a[x][y-1]==k&&a[x][y-1]) return false;if (a[x][y+1]==k&&a[x][y+1]) return false;  //判断有没有与四周相同的return true;
}
int pd(char k,int x1,int y1)  //x1,y1表示扩展正方形的左上角坐标
{x=x1;y=y1;  //x,y表示无法扩展到的行标和列标int flag=0;  //flag表示扩展是否成功for (int i=1;i<=n;i++)if (!a[x][y1]&&!a[x1][y]&&same(k,x,y1)&&same(k,x1,y))  //判断当前位置有没有被放过并且有没有与周围相同{char min1=0;for (char ch='A';ch<k;ch++)  //判断右侧位置能否更小if (same(ch,x1,y)) {min1=ch;break;}if (min1) break;  //如果发现右侧可以放更小的,就退出扩展flag=1;x++;y++;  //往下扩展}else break;for (int i=x1;i<x;i++)  //因为x,y表示无法扩展,所以取小于号for (int j=y1;j<y;j++) a[i][j]=k;  //赋值,扩展return flag;
}
int main()
{scanf("%d%d",&n,&m);for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)if (!a[i][j])for (char k='A';k<='Z';k++)  //从小到大枚举当前位置可以放的最小值 {int x=pd(k,i,j);if (x) break;  //如果成功放入,说明当前位置已经放入了最优值,退出}for (int i=1;i<=n;i++){for (int j=1;j<=m;j++)printf("%c",a[i][j]);printf("\n");} //愉快输出return 0;
}

P2102 地砖铺设(dfs贪心)相关推荐

  1. JZOJ 3807. 【NOIP2014模拟8.25】地砖铺设

    Description 在游戏厅大赚了一笔的Randy 终于赢到了他想要的家具.乘此机会,他想把自己的房间好好整理一 下. 在百货公司,可以买到各种各样正方形的地砖,为了美观起见,Randy 不希望同 ...

  2. C. Code a Trie(Trie+dfs+贪心)

    C. Code a Trie 大佬题解,代码基本就是抄的 对于每一个值计算所有串的LCA,也就是最长公共前缀,将该节点(Trie树的节点)标记,对于这些字符串在LCA下面的点一定不存在(如果存在他们不 ...

  3. Codeforces 846 B Math Show DFS + 贪心

    题目链接: http://codeforces.com/contest/846/problem/B 题目描述: 有N个节点, 每个节点有相同的K个子节点, 每个子节点有时间花费,完成一个子节点获得1分 ...

  4. 数据结构与算法学习⑤(BFS和DFS 贪心算法 二分查找)

    数据结构与算法学习⑤ 数据结构与算法学习⑤ 1.BFS和DFS 1.1.深度优先搜索算法 1.2.广度优先搜索算法 面试实战 102. 二叉树的层序遍历 104. 二叉树的最大深度 515. 在每个树 ...

  5. CodeForces - 805E - Ice cream coloring dfs+贪心

    题意:有一棵具有 n 个节点的树,每个节点代表一个集合,表示集合内两两元素的颜色不同,同时保证集合中拥有某个元素的所有的节点附带着边提取出来,能够形成一个连通图,即不可能出现有三个节点 v1,v2,v ...

  6. 计算机机房地砖铺设施工工艺,地砖铺设的方法及铺设施工流程

    看似简单的瓷砖铺贴,其实有着很严格的工艺要求,如果哪一项没有按照施工流程来做,那么后期会出现粘贴不牢固.起泡或空鼓的现象,严重的会影响工期的进度,今天艾美加小编跟简单的介绍地砖铺贴的方法与地砖铺贴的施 ...

  7. 翻硬币—两种方法 dfs 贪心

    来源:第四届蓝桥杯省赛C++B组 翻硬币 小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情 ...

  8. BZOJ1086 [SCOI2005]王室联邦 【dfs + 贪心】

    题目 "余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成 员来管理.他的国家有n个城市,编号为1..n.一些城市之间有道路相连,任意两 ...

  9. HDU 5527:Too Rich(DFS+贪心)***

    题目链接 题意 给出p块钱,现在要用十种硬币凑出,每种硬币有c[i]个,问最多能用多少个硬币. 思路 首先确定,对于每个硬币就是能用小的替换就不用大的. 所以,可以先把硬币尽量用小的替换,如果小的不够 ...

最新文章

  1. 自动驾驶多模态传感器融合的综述
  2. set和multiset容器简介
  3. java 入门 博客园_javaweb入门
  4. JMeter:负载测试关系数据库
  5. cannot resolve symbol xxxx问题
  6. LeetCode 444. 序列重建(拓扑排序)
  7. mysql数据库赋予权限 版本语法差异
  8. 执子之手简约唯美的表白网站HTML源码
  9. javascript进制转换_《算法笔记》3.5小节——入门模拟-gt;进制转换
  10. NeurIPS | 谷歌使用机器学习如何做好分布外异常检测
  11. python中模块导入问题(已解决)
  12. 请问!退休年龄到了,社保没交够,现在职,公司还可以继续交吗?
  13. 大数据分析如何助力企业发展业务
  14. 图片放大不清晰怎么办?
  15. xss-labs靶场全通关
  16. 查询oracle中所有的用户,如何查询Oracle中所有用户信息
  17. linux-网络安全防火墙
  18. 汽车辅助驾驶系统中的图像处理算法
  19. MSDC 4.3 接口规范(17)
  20. Laravel-hyn/multi-tenancy多租户扩展的使用

热门文章

  1. Tribonnbsp;Vitesse二次开发技术路线
  2. 如何让小米手机其中一个应用一直保持wifi连接设置
  3. 嵌入式Linux系统中nandflash的寻址方式(以k9f1208 nandflash---64M x 8 Bit NAND Flash Memory为参考说明)
  4. 乔布斯:去你妹的iTV 老子要iCar!
  5. 我是如何每天半小时画一张画的?
  6. 爆炸性环境用电气设备分类
  7. 10秒解决B站没有视频音效调节问题
  8. 测试实践-自动化中使用Mock
  9. 等差数列前n项和推导过程
  10. Linux命令行与shell脚本编程大全学习(linux命令行部分)