leetcode 1240. 铺瓷砖(回溯,DFS)
题目链接
https://leetcode-cn.com/problems/tiling-a-rectangle-with-the-fewest-squares/
题意:
用尽可能少的正方形瓷砖来铺地板
思路:
按行递推,每一行的情况扫完之后统计下一行的所有情况
每次填补前判断是否之前已经有瓷砖填上了
难点在于:怎么记录填补一个正方形后,剩余地板的状态信息
(其实不用每次记录剩下的信息,只是下次填剩下的地板时判断一下有没有被填过即可)
class Solution {
public:
// https://leetcode.com/problems/tiling-a-rectangle-with-the-fewest-squares/discuss/414979/Java-back-tracking-solution
//怎么表示分割之后剩下的状态
int ans=INT_MAX;
int vis[14][14];
//回溯
void solve(int r,int c,int n,int m,int cnt){
if(cnt>ans) return;
if(r>=n) {
ans=min(cnt,ans);
return ;
}
if(c>=m){
solve(r+1,0,n,m,cnt);
return ;
}
if(vis[r][c]) solve(r,c+1,n,m,cnt);
for(int k=min(n-r,m-c);k>0 && check(r,c,k);k--){
//染色k
col(r,c,k,1);
solve(r,c+k,n,m,cnt+1);//按行扫描
col(r,c,k,0);//回溯
}
}
bool check(int r,int c,int k){
for(int i=0;i<k;i++){
for(int j=0;j<k;j++){
if(vis[r+i][c+j]) return false;
}
}
return true;
}
void col(int r,int c,int k,int colo){
for(int i=0;i<k;i++){
for(int j=0;j<k;j++){
vis[r+i][c+j]=colo;
}
}
}
int tilingRectangle(int n, int m){
solve(0,0,n,m,0);
return ans;
}
// int dp[14][14]={0};
// int tilingRectangle(int n, int m) {
// if(n==0 || m==0) return 0;
// if(n==m) return dp[n][m]=1;
// if(dp[n][m]) return dp[n][m];
// int ans=INT_MAX;
// //按行覆盖,每次的步长前进为1
// for(int x=min(n,m);x>0;x--){
// ans=min(ans,1+tilingRectangle(n-x,x)+tilingRectangle(n,m-x));//交错的情况,严格来说不对。。
// }
// dp[n][m]=ans;
// return ans;
// }
};
leetcode 1240. 铺瓷砖(回溯,DFS)的更多相关文章
- [LeetCode] 79. 单词搜索(DFS,回溯)
题目 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个单元格 ...
- LeetCode刷题总结-DFS、BFS和回溯法篇
本文总结LeetCode上有关深度优先搜索(DFS).广度优先搜索(BFS)和回溯法的算法题,推荐刷题总数为13道.具体考点分析如下图: 一.深度优先搜索 1.字符匹配问题 题号:301. 删除无效的 ...
- LeetCode编程训练 - 回溯(Backtracking)
回溯基础 先看一个使用回溯方法求集合子集的例子(78. Subsets),以下代码基本说明了回溯使用的基本框架: //78. Subsets class Solution { private: voi ...
- LeetCode Subsets II (DFS)
题意: 给一个集合,有n个可能相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: 看这个就差不多了.LEETCODE SUBSETS (DFS) class Solution { publ ...
- HDU 1010Tempter of the Bone(奇偶剪枝回溯dfs)
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- [LeetCode] 46. 全排列(回溯)
###题目 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], ...
- POJ 3009 Curling 2.0【带回溯DFS】
POJ 3009 题意: 给出一个w*h的地图,其中0代表空地,1代表障碍物,2代表起点,3代表终点,每次行动可以走多个方格,每次只能向附近一格不是障碍物的方向行动,直到碰到障碍物才停下来,此时障碍物 ...
- 回溯 DFS 深度优先搜索[待更新]
首先申明,本文根据微博博友 @JC向北 微博日志 整理得到,本文在这转载已经受作者授权! 1.概念 回溯算法 就是 如果这个节点不满足条件 (比如说已经被访问过了),就回到上一个节点尝试别 ...
- Leetcode 130 Surrounded Regions DFS
将内部的O点变成X input X X X XX O O X X X O XX O X X output X X X XX X X XX X X XX O X X DFS的基本框架是 void dfs ...
随机推荐
- Centos7.8安装Redis
一.安装gcc依赖 由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装 [root@localhost local]# ...
- maven下载和配置
maven就是管理架包(jar)的一个工具类,是一个绝佳的构建工具 但是maven是需要下载和配置环境的,和jdk差不多 1.首先进入apache的官网 http://maven.apache.org ...
- Rest vs Soap 比较
一.前言 昨天为止,政府的一个公共部门的项目顺利结束,就系统间消息传输这个点,知识点总结一下.本文主要参考octoperf的文章,链接见文末参考资料. 系统中用到的是SOAP协议进行传输数据,有人会立 ...
- maven中引入jstl
<!--jsp标签--> <dependency> <groupId>taglibs</groupId> <artifactId>stand ...
- pandas的学习5-导入导出数据
import pandas as pd ''' pandas可以读取与存取的资料格式有很多种,像csv.excel.json.html与pickle等-, 详细请看官方说明文件 ''' # read ...
- windows下python3和python2虚拟环境配置
Python3 被越来越多的开发者所接受,同时让人尴尬的是很多遗留的老系统依旧运行在 Python2 的环境中,因此有时你不得不同时在两个版本中进行开发,调试. 如何在系统中同时共存 Python2 ...
- 根据数据库反向生成PD
原博文 http://www.360doc.com/content/14/0820/20/12385684_403420399.shtml 步骤 File___Reverse Engineer___D ...
- 深入理解MySQL系列之锁
按锁思想分类 悲观锁 优点:适合在写多读少的并发环境中使用,虽然无法维持非常高的性能,但是在乐观锁无法提更好的性能前提下,可以做到数据的安全性 缺点:加锁会增加系统开销,虽然能保证数据的安全,但数据处 ...
- springboot项目配置数据库
在pom.xml文件中配置 <!-- mybatis整合springboot起步依赖--> <dependency> <groupId>org.mybatis.sp ...
- 152. Maximum Product Subarray动态规划连乘最大子串
Find the contiguous subarray within an array (containing at least one number)which has the largest p ...