cv1159 最大全0子矩阵(极大子矩阵)

题目描述 Description
在一个01方阵中找出其中最大的全0子矩阵,所谓最大是指0的个数最多。

输入描述 Input Description
输入文件第一行为整数N,其中1<=N<=2000,为方阵的大小,紧接着N行每行均有N个0或1,相邻两数间严格用一个空格隔开。

输出描述 Output Description
输出文件仅一行包含一个整数表示要求的最大的全零子矩阵中零的个数。

样例输入 Sample Input
5
0 1 0 1 0
0 0 0 0 0
0 0 0 0 1
1 0 0 0 0
0 1 0 0 0

样例输出 Sample Output
9

分析:
dp

虽然是转载了浅谈用极大化思想解决最大子矩阵问题
然而也不是很明白

代码量极小!!!

那么我们就一点一点的解释一下:

认真的研读了论文之后,
我发现两种算法各有长处
而这道题n*m是2000*2000,所以我们可以选择算法二

再简单理一下算法二的思路,枚举每一列
计算这个坐标上的悬线长度,
之后从前往后,从后往前两次扫描,得到从该悬线能够扩展到的最远左右端点,
这样答案统计的时候就记录一下(r-l+1)*h

回归代码,首先是变量的意义:
r,h,l都为滚动数组,l表示向左最远可以扩展的距离,r表示向右最远可以扩展的距离,h表示向上最远可以扩展的距离

la表示当前悬线向左扩展遇到的第一个障碍点的位置,ra表示当前悬线向左扩展的第一个障碍点的位置

在完成读入之后,我们就开始了数组的初始化
这里写图片描述
显然一开始我们认为所有点都能够扩展到左右边界,悬线长度为0

之后枚举行数
这里写图片描述

h[j]表示第j列在当前状况下的悬线长度
l[j]表示第j列上的这条悬线尽力向左扩展的坐标
r[j]表示第j列上的这条悬线尽力向右扩展的坐标

维护l
这里写图片描述

  • 如果这个点是障碍点,那么h(能够向上扩展的距离)显然是0
    因为j是从小到大枚举的,所以在转移j+1的时候
    la至少是当前点,所以在遇到障碍点的时候,la=j
    l[j]=1是为了方便之后的计算
    (再说了,h已经等于0了,l等于什么就不重要了,我们为何不为以后的状态着想一下呢)
  • 如果不是障碍点,悬线的长度就可以增加了,
    同时维护正确的l

维护r
这里写图片描述

  • 如果这个点是障碍点,在维护l的时候我们已经把h变成0了,
    ra=j
    r[j]=m 这也是为了以后的转移着想

  • 如果这个点不是障碍点,维护r

答案统计
这里写图片描述

这里写代码片
#include<cstdio>
#include<cstring>
#include<iostream>using namespace std;int n,m,r[2003],l[2003],h[2003],ans=0,la,ra;
int mp[2010][2010];int main()
{scanf("%d",&n);m=n;int i,j;for (i=1;i<=n;i++)for (j=1;j<=n;j++)scanf("%d",&mp[i][j]);for (i=1;i<=m;i++)h[i]=0,l[i]=1,r[i]=m;for (i=1;i<=n;i++){la=0;ra=m+1;for (j=1;j<=m;j++)if (mp[i][j])h[j]=0,la=j,l[j]=1;elseh[j]++,l[j]=max(l[j],la+1);for (j=m;j>0;j--)if (mp[i][j])r[j]=m,ra=j;elser[j]=min(ra-1,r[j]),ans=max(ans,(r[j]-l[j]+1)*h[j]);}printf("%d",ans);return 0;
}

转载于:https://www.cnblogs.com/wutongtong3117/p/7673169.html

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

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

相关文章

Docker认识基础

版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/48212081 Docker认识基础 作者&#xff1a;chszs&#xff0c;版权所有&#xff0c;未经同意&#xff0c;不得转载。博主主页&#xff1a;http:…

信管 - 挣值 - 资料收集

信息系统项目管理师计算题之挣值分析、完工预测知识与习题 挣值分析&#xff1a;早期只需要记住三个参数&#xff0c;4个指标以及公式即可。PV、EV、AC、CV、SV、CPI、SPI。但现在没这么简单了&#xff0c;深入考核PV、EV、AC的理解&#xff0c;从一段文字描述中计算出PV、EV、…

hdu5424 Rikka with Graph II

给一个n个节点n条边的无向图G&#xff0c;试判断图中是否存在哈密顿路径。 若G中存在哈密顿路径l&#xff0c;则路径端点度数不小于1&#xff0c;其余点度数不小于2。 则G存在哈密顿路径的必要条件&#xff1a; 1&#xff09;G连通&#xff1b; 2&#xff09;G中度数为1的点不超…

VisualStudio中的代码段

VS很强大&#xff0c;在这里就不过多说了&#xff0c;在平时码代码时应用代码段会提高我们的编写速度。 举个例子&#xff1a; 比如输入Console.WriteLine (); 传统方法就是一个字母一个字母的输入进去。 如果大家掌握了代码段&#xff0c;就变得非常简单了。只需要输入cw按两次…

tcp和udp的区别和三次 四次挥握手 http://www.cnblogs.com/bizhu/archive/2012/05/12/2497493.html...

小结TCP与UDP的区别&#xff1a;1.基于连接与无连接&#xff1b;2.对系统资源的要求&#xff08;TCP较多&#xff0c;UDP少&#xff09;&#xff1b;3.UDP程序结构较简单&#xff1b;4.流模式与数据报模式 &#xff1b;5.TCP保证数据正确性&#xff0c;UDP可能丢包&#xff0c;…

java concurrent包介绍及使用

2019独角兽企业重金招聘Python工程师标准>>> 说一说java的concurrent包1-concurrent包简介 前面一个系列的文章都在围绕hash展开&#xff0c;今天准备先说下concurrent包&#xff0c;这个系列可能会以使用场景说明为主&#xff0c;concurrent包本身的代码分析可能比…

Codeforces 864E Fire(背包DP)

背包DP&#xff0c;决策的时候记一下 jc[i][j]1 表示第i个物品容量为j的时候要选&#xff0c;输出方案的时候倒推就好了 #include<iostream> #include<cstdlib> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; c…

EF里查看/修改实体的当前值、原始值和数据库值以及重写SaveChanges方法记录实体状态...

EF里查看/修改实体的当前值、原始值和数据库值以及重写SaveChanges方法记录实体状态 原文:EF里查看/修改实体的当前值、原始值和数据库值以及重写SaveChanges方法记录实体状态本文目录 查看实体当前、原始和数据库值&#xff1a;DbEntityEntry查看实体的某个属性值&#xff1a;…

Linux命令与shell

为什么80%的码农都做不了架构师&#xff1f;>>> 资料来自&#xff1a;《http://blog.chinaunix.net/uid-14880649-id-2954340.html》 所谓shell就是命令解释程序。它提供了程序设计接口&#xff0c;可以使用程序来编程。学习shell对于Linux初学者理解Linux系统是非…

ReportViewer不连接数据库,自定义DataSet导出到报表

先建一个窗体&#xff0c;添加reportview,然后添加RDLC文件&#xff0c;然后添加数据集 1、添加一个数据集 点确定后界面如下 在空白处右键 修改名称 添加行 重命名行 表效果 2、添加报表 确定后出现下面界面 然后添加资料数据源 点击新增&#xff0c;选择资料集&#xff0c;出…

[转] 前端学习必备基础(1)

我们生活在五彩缤纷的世界里&#xff0c;天空、草地、海洋、漫无边际的薰衣草都有它们各自的色彩。你、我、他也有自己的色彩&#xff0c;代表个人特色的衣着、家装、装饰物的色彩&#xff0c;可以充分反映人的性格、爱好、品位。 设计爱好者对色彩的喜爱更是“如痴如狂”&…

最全的jquery datatables api 使用详解

https://www.cnblogs.com/amoniyibeizi/p/4548111.html 最全的jquery datatables api 使用详解 学习可参考&#xff1a;http://www.guoxk.com/node/jquery-datatables http://yuemeiqing2008-163-com.iteye.com/blog/2006942 分别导入css和js文件 <link href"~/Conte…

haut-1280 诡异的迷宫

1280: 诡异的迷宫 时间限制: 2 秒 内存限制: 128 MB提交: 174 解决: 27提交 状态 题目描述 Simple最近刷题&#xff08;打游戏&#xff09;刷多了&#xff0c;一觉醒来发现自己到了一个迷宫里&#xff0c;怎么也出不去了。这时传来了一句话&#xff0c;告诉Simple必须按顺序收…

一个经典实例理解继承与多态原理与优点(附源码)---面向对象继承和多态性理解得不够深刻的同学请进...

一 引子 都说面向对象的4大支柱是抽象&#xff0c;封装&#xff0c;继承与多态。但是一些初涉编程的开发人员&#xff0c;体会不到继承与多态的妙用&#xff0c;本文就试以一个经典实例来诠释继承与多态的用武之地。本实例的需求来自《重构》一书。 二 需求 1. 任务说明 我们的…

推荐几款好用的云笔记软件

一直钟爱印象笔记&#xff0c;程序员的电脑上必装的软件&#xff0c;但最近期限到了&#xff0c;再也不能像以前无限制的上传文件&#xff0c;续费也比去年的只要九块九一年高出了很多倍&#xff0c;因此&#xff0c;注册试用了其他的笔记&#xff0c;发现云笔记众多&#xff0…

Sublime Text 3 初试牛刀

每次我在其他视频网站上看学习视频的时候&#xff0c;看着老师用的编辑器高大上档次&#xff0c;而我一般用Notepad&#xff0c;和Dreamweaver去编辑网页&#xff0c;需要每一行代码&#xff0c;打进去&#xff0c;效率低。最近看到sublime编辑器&#xff0c;在网上搜了一下说是…

[C++学习历程]基础部分 C++中的函数学习

本文地址&#xff1a;http://blog.csdn.net/sushengmiyan/article/details/20305815 作者&#xff1a;sushengmiyan 一。静态变量&#xff1a; 局部变量是线程到达定义的地方的时候进行初始化&#xff0c;如果定义在函数中&#xff0c;那么每次函数调用的时候&#xff0c;都会进…

linux下安装Mysql(干货!!!)解决mysql 1130问题,远程登录问题

转载自&#xff1a;http://www.cnblogs.com/xxoome/p/5864912.html linux版本&#xff1a;CentOS7 64位 1、下载安装包“mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz” # 安装依赖 yum -y install perl perl-devel autoconf libaio 2、把下载的安装包移动到/usr/local/下。…

Openstack Neutron : 安全

目录 - iptable&#xff1a;起源 - tables - chains - rules - 方向 - Security group 安全组&#xff1a; - Firewall 防火墙&#xff1a; - 更高的安全 - 无处安放的安全 - 公共安全 当业务从传统环境迁移到云上之后&a…

SQL语句汇总(三)——聚合函数、分组、子查询及组合查询

https://www.cnblogs.com/ghost-xyx/p/3811036.html SQL语句汇总&#xff08;三&#xff09;——聚合函数、分组、子查询及组合查询 拖了一个星期&#xff0c;终于开始写第三篇了。走起&#xff01; 聚合函数&#xff1a; SQL中提供的聚合函数可以用来统计、求和、求最值等等…