经过观察和样例和数据范围,发现此题不太好找规律,数据范围小,故可以用dfs+回溯解决

确定返回条件:

1.如果当前的使用的地砖数大于存的最小答案,就可以回溯,不再向下搜

2.如果没在1处返回并且当前铺的面积已经等于总面积n*m,便记录答案,返回

搜索:

先确定当前正方形的起点,循环枚举他的最大边长(边长不超过任一总长且此正方形所在位置还未被覆盖)。

循环中,如果满足刚才的条件,就把正方形所在位置填1,并找到下一个还未被填的起点继续dfs。

在回溯中,只需要将上一步填过1的地方填0释放即可。

class Solution {
public:bool vis[15][15]; int ans;int x2,y2;int tilingRectangle(int n, int m) {ans=n*m;memset(vis,false,sizeof(vis));   dfs(0,0,0,0,n,m);return ans;}void fill(int x1,int y1,int i1,bool sta) //填值
{for(int i=x1;i<x1+i1;i++){for(int j=y1;j<y1+i1;j++){vis[i][j]=sta;}}
}void find(int n,int m)  //找到下一个还未填1的位置
{for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(vis[i][j]==false){x2=i;y2=j;return ;}}}
}bool check(int x1,int y1,int i1) //检查当前正方形是否能填
{for(int i=x1;i<x1+i1;i++){for(int j=y1;j<y1+i1;j++){if(vis[i][j]==true) return 0;}}return 1;
}void dfs(int x,int y,int s,int cur,int n,int m)
{if(cur>=ans) return; //剪枝if(s==n*m)  //满足条件{ans=cur;return;}for(int i=min(n-x,m-y);i>0&&check(x,y,i);i--)  //枚举所在起点的边长{fill(x,y,i,true); //填1find(n,m); //找到下一个还未填的位置dfs(x2,y2,s+i*i,cur+1,n,m); //dfsfill(x,y,i,false); //回溯,填0}
}};

2023.6.8每日一题相关推荐

  1. 2023.7.8每日一题

    因为此题是有序数组,所以可以使用双指针O(n)过,维护两端的双指针,如果总和大于target,右指针左移;小于target左指针右移即可. class Solution { public:vector ...

  2. 2023.6.26每日一题

    假设此题没有num2的影响,那么就可以计算num1二进制的1的个数,就是要操作的次数. 此时题中有num2,我们不妨从小到大枚举次数k,一次将所有次数的num2减去,再计算1的个数      k为操作 ...

  3. 2023.6.3每日一题

    分析此题可发现此题只有四种状态: ①:"aaab"这种只有一组连续相同的字符串,直接统计有多少个连续的. ②:"aaabbaaa"这种有两组但是中间隔的超过一个 ...

  4. 2023.6.1每日一题

    在求最小值中的最大值或最大值的最小值时,往往采用二分解决,这道题二分的对象就是甜蜜度.在二分之前首先对price进行升序排序,在二分初始化中:left=0,right=price[n-1]-price ...

  5. 2023.7.1每日一题

    遍历O(n^2)能过,但可以O(n)过, 维护一个map,如果当前map中没有当前数字,就将target-当前数字和下标存入map中,否则返回当前数字下标和target-当前数字的下标 class S ...

  6. 2023.6.30每日一题

    遍历即可 class Solution { public:bool isCircularSentence(string sentence) {int n=sentence.size();int fla ...

  7. 2023.7.4每日一题

    先对每行排序,再将每行的所有列取最大值,一直加到ans里就行 class Solution { public:int matrixSum(vector<vector<int>> ...

  8. 2023.6.25每日一题

    判断矩形是否和圆有公共点,只需判断矩形上是否存在一点(x,y)满足点(x,y)到圆心的距离大于等于半径,如果满足则说明有公共点,不满足则说明没有公共点. 现在要找矩形上一点(x,y)到圆心的距离最小( ...

  9. 2023.6.23每日一题

    模拟 class Solution { public:int maximumValue(vector<string>& strs) {int ans=0;int flag=0;fo ...

最新文章

  1. 智慧城市新探索:摩拜京东联合利用智能单车数据检测违章停车
  2. Ajax (部分二:prototype.js代码)总结页面向后台传Form值、单个值和后台向前台传一个或是一组值...
  3. 重磅!一文解读神策智能推荐
  4. nginx https 访问http_Nginx之Http模块系列之访问控制模块
  5. 如何解决微服务的数据一致性分发问题
  6. C# Regex类详解
  7. 基于事件驱动架构构建微服务第1部分:应用程序特定的业务规则
  8. 【蓝桥杯官网试题 - 算法训练 】K好数(线性dp与优化)
  9. GB28181流媒体服务LiveGBS启动报错 HTTP Port[10000] In Use
  10. 图像处理——alpha融合
  11. SQL Server 2008 R2 完全卸载
  12. 为什么要选择Linux
  13. 一个Web前端实习生的简历
  14. 5种主流的移动端广告类型
  15. mysql的填充因子_确定SQL Server填充因子(FILLFACTOR)值的方法
  16. C语言:歌德巴赫猜想:2000以内的正偶数(不包括2)都能够分解为两个质数之和
  17. 利用opencv+QT打开并显示图片
  18. Acwing 游戏时间 C++ python
  19. API接口文档利器:Swagger
  20. gitee搭建图床流程

热门文章

  1. java中BigInteger用法的详解
  2. python中eps参数_Matplotlib简介和pyplot的简单使用——输出eps格式图像
  3. 二、如何使用 Flux 和 Mono 构建响应式数据流?
  4. 在RIVZ下,利用程序让自己的joint动起来
  5. 红酒自动贩卖机 界面和一般操作
  6. 天天学Python(一)—鸭子模型
  7. mysql 把主键当外键_mysql主键和外键那点事
  8. 我从楼上跳下的那一刻!
  9. Action Script3.0面向对象编程
  10. 轻轻松松学CSS:position