铺瓷砖【LC1240】

你是一位施工队的工长,根据设计师的要求准备为一套设计风格独特的房子进行室内装修。

房子的客厅大小为 n x m,为保持极简的风格,需要使用尽可能少的 正方形 瓷砖来铺盖地面。

假设正方形瓷砖的规格不限,边长都是整数。

请你帮设计师计算一下,最少需要用到多少块方形瓷砖?

看了官方题解,决定今天当一下cv工程师

  • 思路:暴力回溯

    如果某一个方格 ( x , y ) (x,y) (x,y)没有被覆盖,那么就以该方格为左上角铺瓷砖,枚举其可以铺的最大长度 [ 1 , m i n ( m − x , n − y ) ] [1,min(m-x,n-y)] [1,min(m−x,n−y)]

  • 实现

    class Solution {int ans;public int tilingRectangle(int n, int m) {ans = Math.max(n, m);boolean[][] rect = new boolean[n][m];dfs(0, 0, rect, 0);return ans;}public void dfs(int x, int y, boolean[][] rect, int cnt) {int n = rect.length, m = rect[0].length;if (cnt >= ans) {return;}        if (x >= n) {ans = cnt; return;}/* 检测下一行 */        if (y >= m) {dfs(x + 1, 0, rect, cnt); return;}        /* 如当前已经被覆盖,则直接尝试下一个位置 */if (rect[x][y]) {dfs(x, y + 1, rect, cnt);return;}for (int k = Math.min(n - x, m - y); k >= 1 && isAvailable(rect, x, y, k); k--) {/* 将长度为 k 的正方形区域标记覆盖 */fillUp(rect, x, y, k, true);/* 跳过 k 个位置开始检测 */dfs(x, y + k, rect, cnt + 1);fillUp(rect, x, y, k, false);// 回溯}}public boolean isAvailable(boolean[][] rect, int x, int y, int k) {for (int i = 0; i < k; i++) {for (int j = 0; j < k; j++) {if (rect[x + i][y + j]) {return false;}}}return true;}public void fillUp(boolean[][] rect, int x, int y, int k, boolean val) {for (int i = 0; i < k; i++){for (int j = 0; j < k; j++) {rect[x + i][y + j] = val;}}}
    }作者:力扣官方题解
    链接:https://leetcode.cn/problems/tiling-a-rectangle-with-the-fewest-squares/solutions/2300093/pu-ci-zhuan-by-leetcode-solution-r1bk/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

【每日一题Day231】LC1240铺瓷砖 | 暴力回溯相关推荐

  1. 算法笔记——每日一题(完结)

    算法笔记 From Now To My Death 前言 初级算法 1.两数之和 7.整数反转 9.回文数 14.最长公共前缀 27.移除元素[拷贝复制] 28.实现strStr()[双指针] 35. ...

  2. 倪文迪陪你学蓝桥杯2021寒假每日一题:1.26日(2019省赛A组第4题)

    2021年寒假每日一题,2017~2019年的省赛真题.本文内容由倪文迪(华东理工大学计算机系软件192班)和罗勇军老师提供.每日一题,关注蓝桥杯专栏: https://blog.csdn.net/w ...

  3. 【比赛】算法设计与编程挑战赛——每日一题

    很多题目都是洛谷上有的,可以自己去搜索 [参考:题目列表 - 洛谷 | 计算机科学教育新生态] 在每日一题中,我会给出题目的算法标签以供同学们自学. 每日一题的难度会越来越大,会尝试覆盖尽可能多的算法 ...

  4. Codeforces Round #694 (Div. 1 + Div2)(A ~ H,8题全,超高质量题解)【每日亿题】2021/2/1、2/2

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #694 (Div. 1 + Div2)(A ~ ...

  5. 递增的整数序列链表的插入_每日算法题 | 剑指offer 链表专题 (5)链表中倒数第k个节点...

    点击上方"Jerry的算法和NLP",选择"星标"公众号 重磅干货,第一时间送达 题目 链表中倒数第k个节点 题目要求 输入一个链表的头结点,从尾到头反过来打印 ...

  6. 【每日一题】8月28日题目精讲 编号

    [每日一题]8月28日题目精讲 编号 链接:https://ac.nowcoder.com/acm/problem/19925 来源:牛客网 题目描述 你需要给一批商品编号,其中每个编号都是一个7位1 ...

  7. 【每日一题】7月17日题目精讲—BOWL 碗的叠放

    [每日一题]7月17日题目精讲-BOWL 碗的叠放 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld ...

  8. 【每日一题】7月15日题目精讲—生日快乐

    [每日一题]7月15日题目精讲-生日快乐 [SCOI2009]生日快乐 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO For ...

  9. 每日一题:leetcode456.132模式

    题目描述 题目分析 我觉得这道题应该是我做过最难的中等题之一了,这是昨天的每日一题,但是昨天用nlogn的做法做出来以后在看题解,发现有些看不懂(觉得题解有点故弄玄虚).然后今天中午又花了一点时间才搞 ...

最新文章

  1. 7个让你惊叹的HTML技巧
  2. 在Windows下创建硬连接和文件夹连接点的工具
  3. Android FeceDetector(人脸识别)
  4. 惠而浦:使用Netty和Kafka的微服务
  5. 用 convert2rhel 工具将 CentOS 迁移至 RHEL
  6. 华为鸿蒙万物互联应用,为什么我需要万物互联? 鸿蒙能带来什么?
  7. SpringMVC 工作流程
  8. ApiCloud数据Url请求
  9. mapper同时添加数据只能添加一条_神器之通用mapper的使用
  10. 计算机无法访问权限,局域网共享无法访问权限不足的解决方法
  11. AD9的PCB技巧——CAD的导入
  12. php环境安装Java_常用PHP运行环境一键安装包推荐
  13. 微信小程序tabBar图标大小64 * 64
  14. 微信商户批量转账到零钱
  15. java ocr数字识别_使用Tesseract Ocr识别数字
  16. 教培机构如何深耕种子用户从0到1-线上线下教学的有效融合
  17. 基于单片机MC9S12XS128的两轮自平衡小车设计
  18. wfp例子inspect说明
  19. 一本通1032、2032、2048
  20. 【ANSYS 学习笔记】Case05_Basic Transient Sources and Circuit

热门文章

  1. dilation convolution
  2. 要钱的html模板,25+ 个免费和收费的企业网站模板
  3. struts2.1.8 StrutsPrepareAndExecuteFilter 关于静态资源处理问题。访问classPath下静态资源
  4. 中国前列腺癌的诊断与治疗行业市场供需与战略研究报告
  5. 零基础学习Java的方法有哪些?
  6. 实用调试的技巧,VS编译器常用调试详解
  7. stylus在vue中的安装及使用
  8. NOIP 2021 游记
  9. idea插件Rainbow Brackets---标识成对括号“彩虹色的括号”
  10. 双十一什么数码产品值得买?2022双十一值得买的数码好物推荐