hdu 1937(尺取法)
题意:给定一个R*C的矩阵,选择一个面积最小的子矩阵,使得其内部‘.’的个数>=k。
解题思路:这道题如果时普通的枚举,会要达到O(N^5)严重超时。这里可以采用高效的枚举方法——尺取法。
首先还是用一个sum[i][j]记录(1,1)到(i,j)所围成的矩阵里'.'的个数。
接下来是比较关键的,如何采用尺取法。
可以两层循环枚举第i列到第j列,最内层循环就是枚举行了,在最内层循环里,如果熟悉尺取法的话,会发现这是一个典型的尺取法模型。
这样可以做到O(N^3)复杂度。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int maxn = 305;
const int inf = 0x7ffffff;
int n,m,k,map[maxn][maxn],sum[maxn][maxn];
char str[maxn];int main()
{while(scanf("%d%d%d",&n,&m,&k),n+m+k){for(int i = 1; i <= n; i++){scanf("%s",str+1);for(int j = 1; j <= m; j++){if(str[j] == '.')map[i][j] = 1;else map[i][j] = 0;sum[i][j] = sum[i][j-1] + map[i][j];}}for(int i = 2; i <= n; i++)for(int j = 1; j <= m; j++)sum[i][j] += sum[i-1][j];int ans = inf;for(int i = 1; i <= m; i++)for(int j = i; j <= m; j++){int p = 1;for(int t = 1; t <= n; t++){while(sum[t][j] - sum[t][i-1] - sum[p-1][j] + sum[p-1][i-1] >= k){ans = min(ans,(j - i + 1) * (t - p + 1));p++;}}}printf("%d\n",ans);}return 0;
}
hdu 1937(尺取法)相关推荐
- hdu 5178(尺取法)
pairs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem De ...
- Codeforces 1548B Integers Have Friends 尺取法 Hdu 7073 Integers Have Friends 2.0 力能扛鼎随机算法
文章目录 题意 题解 CF1548B 题解 Hdu 7073 CF1548B HDU7073 题意 定义数的好友组为一个集合SSS,取正整数m>1,∀x∈s,xmodmm>1,\foral ...
- hdu 5358(尺取法)
解题思路:这题可以利用尺取法,不过需要两个指针.如果采用一个指针,会出现这种情况,由于是取对数,所以中间可能会有很多log2S(i,j)的值相等,如果只有一个指针,会使得一些区间没有被算进去.比如0, ...
- hdu 5672(尺取法)
题意:有一个10<=长度<=1000000的字符串,仅由小写字母组成.求有多少子串,包含至少k(1<= k <= 26)个不同的字母. 解题思路:利用尺取法求符合条件的临界区间 ...
- 【HDU - 5672】String(尺取法)
题干: There is a string SS.SS only contain lower case English character.(10≤length(S)≤1,000,000)(10≤le ...
- 解题报告 (十三) 尺取法
文章目录 尺取法 解题报告 PKU 2100 Graveyard Design PKU 3061 Subsequence PKU 2739 Sum of Consecutive Prime Numbe ...
- HDU5178 pairs【二分法】【尺取法】
pairs HDU - 5178 John has nn points on the X axis, and their coordinates are (x[i],0),(i=0,1,2,-,n− ...
- 尺取法 --算法竞赛专题解析(2)
本系列文章将于2021年整理出版,书名<算法竞赛专题解析>. 前驱教材:<算法竞赛入门到进阶> 清华大学出版社 2019.8 网购:京东 当当 作者签名书 如有建议, ...
- hdu6119 小小粉丝度度熊【尺取法(滑动窗口)】
这是2017百度之星初赛二的赛题. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6119 代码思路: 排序后合并交叉区间 使用尺取法(滑动窗口法),每 ...
最新文章
- 深度学习奠基人特伦斯:美国学界已经找到了解释人工智能“黑盒子”的方法...
- VScode快速一键生成html、vue、jsx、ajax、sass、docker等代码片段
- InnerHTML、InnerText、outerHTML、outerText的区别
- 韩顺平循序渐进学java 第19讲 多维数组
- linux shell less 命令---转
- 2021-03-09 Matlab RBF神经网络及其实例
- 在Visual Studio 2005中安装Qt 4.3.2
- @SentinelResource注解实现热点限流
- linux ftp配置chroot,vsftp chroot 设置
- 例子---PHP与Form表单之三
- Android各版本代号、版本号、API/NDK级别、发布时间及市场份额
- android xml 指纹动画,Android 指纹识别(给应用添加指纹解锁)
- MATLAB----数据拟合
- 热门好用的空号检测API推荐
- NBNS扫描工具nbtscan-unixwiz
- Win7 64位操作系统连接HP 1010打印机完美解决方案
- 电脑ping,电脑ping怎么用|电脑ping怎么打开_PC6教学
- linux多线程之原子锁技术
- excel求四分位数(QUARTILE 函数)
- java graphics2d 画圆_java Graphics2D 画图