2023.6.8每日一题
经过观察和样例和数据范围,发现此题不太好找规律,数据范围小,故可以用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每日一题相关推荐
- 2023.7.8每日一题
因为此题是有序数组,所以可以使用双指针O(n)过,维护两端的双指针,如果总和大于target,右指针左移;小于target左指针右移即可. class Solution { public:vector ...
- 2023.6.26每日一题
假设此题没有num2的影响,那么就可以计算num1二进制的1的个数,就是要操作的次数. 此时题中有num2,我们不妨从小到大枚举次数k,一次将所有次数的num2减去,再计算1的个数 k为操作 ...
- 2023.6.3每日一题
分析此题可发现此题只有四种状态: ①:"aaab"这种只有一组连续相同的字符串,直接统计有多少个连续的. ②:"aaabbaaa"这种有两组但是中间隔的超过一个 ...
- 2023.6.1每日一题
在求最小值中的最大值或最大值的最小值时,往往采用二分解决,这道题二分的对象就是甜蜜度.在二分之前首先对price进行升序排序,在二分初始化中:left=0,right=price[n-1]-price ...
- 2023.7.1每日一题
遍历O(n^2)能过,但可以O(n)过, 维护一个map,如果当前map中没有当前数字,就将target-当前数字和下标存入map中,否则返回当前数字下标和target-当前数字的下标 class S ...
- 2023.6.30每日一题
遍历即可 class Solution { public:bool isCircularSentence(string sentence) {int n=sentence.size();int fla ...
- 2023.7.4每日一题
先对每行排序,再将每行的所有列取最大值,一直加到ans里就行 class Solution { public:int matrixSum(vector<vector<int>> ...
- 2023.6.25每日一题
判断矩形是否和圆有公共点,只需判断矩形上是否存在一点(x,y)满足点(x,y)到圆心的距离大于等于半径,如果满足则说明有公共点,不满足则说明没有公共点. 现在要找矩形上一点(x,y)到圆心的距离最小( ...
- 2023.6.23每日一题
模拟 class Solution { public:int maximumValue(vector<string>& strs) {int ans=0;int flag=0;fo ...
最新文章
- 智慧城市新探索:摩拜京东联合利用智能单车数据检测违章停车
- Ajax (部分二:prototype.js代码)总结页面向后台传Form值、单个值和后台向前台传一个或是一组值...
- 重磅!一文解读神策智能推荐
- nginx https 访问http_Nginx之Http模块系列之访问控制模块
- 如何解决微服务的数据一致性分发问题
- C# Regex类详解
- 基于事件驱动架构构建微服务第1部分:应用程序特定的业务规则
- 【蓝桥杯官网试题 - 算法训练 】K好数(线性dp与优化)
- GB28181流媒体服务LiveGBS启动报错 HTTP Port[10000] In Use
- 图像处理——alpha融合
- SQL Server 2008 R2 完全卸载
- 为什么要选择Linux
- 一个Web前端实习生的简历
- 5种主流的移动端广告类型
- mysql的填充因子_确定SQL Server填充因子(FILLFACTOR)值的方法
- C语言:歌德巴赫猜想:2000以内的正偶数(不包括2)都能够分解为两个质数之和
- 利用opencv+QT打开并显示图片
- Acwing 游戏时间 C++ python
- API接口文档利器:Swagger
- gitee搭建图床流程