题目描述:

对于给出的一个n*m的矩形,它由1和0构成,现在给你一个r*c的矩形空间可以选择,且可以选择无数次(被选中的范围内01翻转),要求问将这个01矩阵全部变成0的最少需要翻多少次,且如果无法实现输出-1

题目分析:

对于单个位置而言,不是0就是1,且如果是1则必须接受反转,对某个点来说,反转1,3,5,7...次是一样的,翻转0,2,4,6,8...次是一样的,所以对于矩形N*M中的任何一个点只有反转和不反转两种选择,而如果是1,则必须接受反转,所以我们需要做的就是从左上开始,一行一行每个位置依次判断,(将这个点作为你反转矩阵r*c的左上角)这样能保证主动去反转的每个点只翻一次,且不会被后面的翻转情况所影响(翻前面的点时后面的下面的点可能会一同被反转,但是没有关系,我们接下来会去依次判断,我们的循环就是从上往下,从左往右)

这是一种贪心的思维,我们每次需要翻转的情况都是必须翻的,而一旦遇到需要反转,但是剩余的选择空间不足以容纳以该点为左上角的r*c的矩阵时,返回-1,翻转成功计数器+1

代码:

 #include<iostream>
using namespace std; char mat[][];
int n, m, r, c; int run(){
int ans = ;
for(int i = ; i <= n; i++){
for(int j = ; j <= m; j++){
if(mat[i][j] == ''){
int row = i+r-;
int col = j+c-;
if(row <= n && col <= m){
ans++;
for(int k = i; k <= row; k++){
for(int l = j; l <= col; l++){
if(mat[k][l] == '') mat[k][l] = '';
else mat[k][l] = '';
}
}
}else{
return ;
}
}
}
}
return ans;
} int main(){
while(scanf("%d%d%d%d", &n, &m, &r, &c) != EOF){
if(n == ) break;
for(int i = ; i <= n; i++){
for(int j = ; j <= m; j++){
cin>>mat[i][j];
}
}
int cnt = run();
if(cnt == ) printf("-1\n");
else printf("%d\n", cnt);
}
return ;
}

hdu1801 01翻转 贪心的更多相关文章

  1. HDU -2546饭卡(01背包+贪心)

    这道题有个小小的坎,就是低于5块不能选,大于5块,可以任意选,所以就在初始条件判断一下剩余钱数,然后如果大于5的话,这时候就要用到贪心的思想,只要大于等于5,先找最大的那个,然后剩下的再去用背包去选择 ...

  2. HDU--3466(0-1背包+贪心/后效性)

    题意是: 给你一些钱 m ,然后在这个国家买东西, 共有 n 件物品,每件物品有  价格 P    价值 V    还有一个很特别的属性 Q, Q 指 你如过想买这件物品 你的手中至少有这钱Q . 虽 ...

  3. 51nod 2517 最少01翻转次数

    小b有一个01序列,她每次可以翻转一个元素,即将该元素异或上1. 现在她希望序列不降,求最少翻转次数. 收起   输入 第一行输入一个数n,其中1≤n≤20000: 第二行输入一个由‘0’和‘1’组成 ...

  4. Proud Merchants HDU - 3466 01背包&&贪心

    最近,我去了一个古老的国家.在很长一段时间里,它是世界上最富有.最强大的王国.结果,这个国家的人民仍然非常自豪,即使他们的国家不再那么富有.商人是最典型的,他们每个人只卖一件商品,价格是Pi,但是如果 ...

  5. JOI2013-2019

    代码自己去LOJ看 JOI2013 彩灯 把序列划分成若干极长交替列,那么最优的方案一定是将一个极长交替列翻转使得连续的三个极长交替列合成一个.计算相邻三个极长交替列长度的最大值即可. 搭乘IOI火车 ...

  6. 个人训练记录(UPD 9.16)

    本文章记录一些较难的题,摘自自己的blog中的其他文章.也有些单独成章有点浪费的题也写在里面了. 2019.7.15-2019.7.21 1182F(2900) 题意:求在区间 \([a,b]\) 中 ...

  7. 2012 Multi-University #9

    计算几何 A Farmer Greedy 题意:n个点选3个组成三角形,问m个点在三角形内的数字是奇数的这样的三角形个数. 分析:暴力O(N^3*M)竟然能过!我写的搓,加了优化才过掉.正解是先处理出 ...

  8. POI2010题解

    POI2010题解 我也不知道我为什么就开始刷POI了 有些题目咕掉了所以不完整(我都不知道POI到底有多少题) [BZOJ2079][Poi2010]Guilds (貌似bz跟洛谷上的不是一个题?) ...

  9. Codeforces - tag::data structures 大合集 [占坑 25 / 0x3f3f3f3f]

    371D 小盘子不断嵌套与大盘子,最后与地面相连,往里面灌水,溢出部分会往下面流,求每次操作时当前的盘子的容量 其实这道题是期末考前就做好了的.. 链式结构考虑并查集,然后没了(求大佬解释第一个T的点 ...

随机推荐

  1. Spring 中的异常处理

    工作中遇到这样的同事,问他活干完吗,他说开发好了,结果测试时发现各种异常情况未处理,联调测试时各种未知错误,最后联调完成比他预期的两倍工作量还多.这样的开发如果是新人还可以原谅,如果有工作经验且出现多 ...

  2. appium--多进程启动多设备

    前戏 在前面我们都是使用一个机器进行测试,在做app自动化的时候,我们要测不同的机型,也就是兼容性测试,如果一台一台设备去执行,那就显的太麻烦了.所以经常需要我们启动多个设备,同时跑自动化测试用例,要 ...

  3. [LeetCode] 483. Smallest Good Base 最小的好基数

    For an integer n, we call k>=2 a good base of n, if all digits of n base k are 1. Now given a str ...

  4. [LeetCode] 406. Queue Reconstruction by Height 根据高度重建队列

    Suppose you have a random list of people standing in a queue. Each person is described by a pair of ...

  5. 教你查阅Java API 英文文档(JDK 11)

    JAVA Document:https://docs.oracle.com/en/java/javase/11/ 然后找到“Specifications”并点击 API Documentation 比 ...

  6. 你真的了解strtotime('X month')吗

    经常会有人被strtotime结合-1 month, +1 month, next month的时候搞得很困惑, 然后就会觉得这个函数有点不那么靠谱, 动不动就出问题. 用的时候就会很慌… 今天是20 ...

  7. SpringBoot集成Spring Security(3)——异常处理

    源码地址:https://github.com/jitwxs/blog_sample 文章目录 一.常见异常二.源码分析三.处理异常不知道你有没有注意到,当我们登陆失败时候,Spring securi ...

  8. 阿里巴巴 Java 开发手册 1.4.0

    一.编程规约(一) 命名风格1. [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.反例: _name / __name / $name / name_ / name$ ...

  9. LeetCode 485:连续最大1的个数 Max Consecutive Ones(python java)

    公众号:爱写bug 给定一个二进制数组, 计算其中最大连续1的个数. Given a binary array, find the maximum number of consecutive 1s i ...

  10. # Leetcode 14:Longest Common Prefix 最长公共前缀

    公众号:爱写bug Write a function to find the longest common prefix string amongst an array of strings. If ...