A. Portal(dp优化枚举)

Problem - 1580A - Codeforces

CQXYM发现了一个大小为n×m的矩形。矩形由n行m列的方块组成,每个方块可以是黑曜石方块或空方块。CQXYM可以通过一次操作将黑曜石方块变为空方块,或将空方块变为黑曜石方块。

一个大小为a×b的矩形M被称为传送门,当且仅当满足以下条件:

a≥5,b≥4
对于所有1<x<a,方块Mx,1和Mx,b都是黑曜石方块。
对于所有1<x<b,方块M1,x和Ma,x都是黑曜石方块。
对于所有1<x<a,1<y<b,方块Mx,y都是空方块。
M1,1、M1,b、Ma,1、Ma,b可以是任意类型的方块。

注意,行数必须是a,列数必须是b,而不是相反的。

注意角落的方块可以是任意类型的。

CQXYM想知道他至少需要进行多少次操作才能使至少一个子矩形成为传送门。

输入: 第一行包含一个整数t(t≥1),表示测试用例的数量。

对于每个测试用例,第一行包含两个整数n和m(5≤n≤400,4≤m≤400)。

然后是n行,每行包含m个字符0或1。如果第i行的第j个字符为0,则方块Ai,j为一个空方块。否则,方块Ai,j为一个黑曜石方块。

保证所有测试用例中n的总和不超过400。

保证所有测试用例中m的总和不超过400。

输出: 输出t个答案,每个答案占一行。

Examples

Input

Copy

1
5 4
1000
0000
0110
0000
0001

Output

Copy

12

Input

Copy

1
9 9
001010001
101110100
000010011
100000001
101010101
110001111
000001111
111100000
000110000

Output

Copy

5

题解:
可以想到的思路是,我们枚举矩形的上下左右,但是这样的时间复杂的就是O(n^4)

所以想想如何优化掉一维

假设我们枚举上下界,我们可以利用前缀和,以方便,快速求出一列多少需要改变

接着枚举列j

假设sum为到当前位置,需要改变的值(除了,边界均为0)

cnt为到当前位置,依次为边界需要,这一列为边界需要改变的值

假设i为左边界,j为有边界

sum[j - 1] + cnt[j] - sum[i] + cnt[i],即为所求

我们发现只要维护好,cnt[i] - sum[i]的最小值,优化掉一维,不必再枚举左边界

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;#define int long long
typedef pair<int,int> PII;
typedef unsigned long long ULL;
const int N = 5e5*2 + 10;
int mod = 998244353;
int a[405][505];
int s[405][405];
int pre[N];
void solve()
{int n,m;cin >> n >> m;for(int i = 1;i <= n;i++){string t;cin >> t;t = " " + t;for(int j = 1;j <= m;j++){a[i][j] = t[j] - '0';s[i][j] = s[i - 1][j] + a[i][j];}}int ans = 1e9;pre[0] = 1e9;for(int i = 1;i <= n;i++){for(int j = i + 4;j <= n;j++){int sum = 0;for(int k = 1;k <= m;k++){int x = s[j - 1][k] - s[i][k];int y = 2 - a[i][k] - a[j][k];int w = j - i - 1 - x;if(k > 3){ans = min(ans,pre[k - 3] + sum + w);}sum += x + y;pre[k] = min(pre[k - 1],w - sum);}}}cout << ans <<"\n";
}
signed main()
{ios::sync_with_stdio(0 );cin.tie(0);cout.tie(0);int t = 1;cin >> t;while(t--){solve(); }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/1509.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【adb指令】

一、什么是adb adb的全称为Android Debug Bridge&#xff0c;官方提供的用于操作安卓设备的工具。 二、adb用来干什么&#xff1f; 在电脑终端通过命令行&#xff1a; 打开收手机应用&#xff1b;传输文件&#xff1b;点击、输入、滑动等&#xff1b;硬件操作、返回、回到首…

SpringBoot04:JSR303数据校验及多环境切换

目录 一、JSR303数据校验 1、如何使用&#xff1f; 2、常见参数 二、多环境切换 1、多配置文件 2、yaml的多文档块 3、配置文件加载位置 一、JSR303数据校验 1、如何使用&#xff1f; SpringBoot中可以用Validated来校验数据&#xff0c;如果数据异常则会统一抛出异常…

php中的双引号与单引号的基本使用

字符串,在各类编程语言中都是一个非常重要的数据类型 网页当中的图片,文字,特殊符号,HTMl标签,英文等都属于字符串 PHP字符串变量用于存储并处理文本, 在创建字符串之后&#xff0c;我们就可以对它进行操作。我们可以直接在函数中使用字符串&#xff0c;或者把它存储在变量中 字…

第9章 异常处理

第9章 异常处理 9.1 Java异常处理 try-catch-finally ​ ​ 9.2 Scala异常处理 ​ ​ package chapter09object Test01_Exception {def main(args: Array[String]): Unit {try {val n 10 / 1} catch {case e: ArithmeticException > {println("发生算数异常&quo…

【MySQL数据库 | 第二十篇】explain执行计划

目录 前言&#xff1a; explain&#xff1a; 语法&#xff1a; 总结&#xff1a; 前言&#xff1a; 上一篇我们介绍了从时间角度分析MySQL语句执行效率的三大工具&#xff1a;SQL执行频率&#xff0c;慢日志查询&#xff0c;profile。但是这三个方法也只是在时间角度粗略的…

简要记录java 锁

Java中的锁机制主要分为Lock和Synchronized. Synchronized在JVM里的实现是基于进入和退出Monitor对象来实现方法同步和代码块同步的。monitorenter指令是在编译后插入到同步代码块的开始位置&#xff0c;而monitorexit是插入到方法结束处和异常处&#xff0c;JVM要保证每个mon…

java循环结构

Java中有三种主要的循环结构&#xff1a; while 循环do…while 循环for 循环 在Java5中引入了一种主要用于数组的增强型for循环。 1.while循环 语法&#xff1a; while(布尔表达式){ // 循环内容 } 复制 实例&#xff1a; public class Demo{ public static void main(S…

【数据库】MySQL 高级(进阶) SQL 语句

文章目录 前提条件一、常用查询1. SELECT&#xff08;显示查询&#xff09;2. DISTINCT&#xff08;不重复查询&#xff09;3. WHERE&#xff08;有条件查询&#xff09;4. AND/OR&#xff08;且/或&#xff09;5. IN &#xff08;显示已知值的字段&#xff09;6. BETWEEN&…

适合嵌入式开发的GUI(嵌入式学习)

嵌入式开发的GUI如何选择&#xff1f; 常见的嵌入式GUI开发方法轻量级GUI库优缺点 基于Web技术优缺点 Qt框架优缺点 原生开发优缺点 嵌入式系统的限制 常见的嵌入式GUI开发方法 嵌入式开发中的GUI&#xff08;图形用户界面&#xff09;是指在嵌入式系统中实现图形化的用户界面…

深度学习05-RNN循环神经网络

概述 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一种具有循环连接的神经网络结构&#xff0c;被广泛应用于自然语言处理、语音识别、时序数据分析等任务中。相较于传统神经网络&#xff0c;RNN的主要特点在于它可以处理序列数据&#xf…

【软件设计师暴击考点】下午题高频考点暴击系列

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件…

亚马逊测评:如何有效使用IP和养号设备环境

随着网络科技的崛起&#xff0c;越来越多的本土企业入驻亚马逊电子商务平台上&#xff0c;这导致了对产品评价需求的激增。然而&#xff0c;评价并非随意进行&#xff0c;它需要多方面的资源&#xff0c;并需要密切注意一些重要环节。以下是我分享给大家一些宝贵的知识&#xf…