题目来源:http://acm.nuaa.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1017
最大0,1子矩阵
Time Limit(Common/Java):6000MS/20000MS
Memory Limit:65536KByte
Total Submit:600
Accepted:123
Description
在一个0,1
方阵中找出其中最大的全0
子矩阵,所谓最大是指O
的个数最多
Input
单组数据第一行为整数N
,其中1<=N<=2000
,为方阵的大小,紧接着N
行每行均有N
个0
或1
,相邻两数间严格用一个空格隔开
Output
输出仅一行包含一个整数表示要求的最大的全零子矩阵中零的个数
Sample Input
5
0 1 0 1 0
0 0 0 0 0
0 0 0 0 1
1 0 0 0 0
Sample Output
9
Source
Narashy
解题思路:
用h[j]记录第j列到当前行的连续0的个数
用l[j]记录当前行 <=j列的不小于h[j]的位置。初始值:l[j]=j;
用r[j]记录当前行 >=j 列的不小于h[j]的列位置。初始值:r[j]=j;
则在每一行的每一个不小于h[j]的最大面积为h[j]*(r[j]-l[j]+1);
全局最大面积则产生所有的h[j]里。复杂度O(n^2)
代码:
#include <iostream>
#include <stdio.h>
#define N 2001
int a[N][N];
int h[N];
int l[N];
int r[N];
int main()
{
int n;
int i, j ,k;
while(scanf("%d",&n)!= EOF)
{
for ( i = 1; i<= n; ++i )
for ( j = 1; j <= n; ++j)
scanf("%d", &a[i][j]);
for ( i = 1; i <= n; ++i )
h[i] = 0;
int ans = 0;
for ( i = 1; i <= n; ++i )
{
for ( j = 1; j <= n; ++j )
{
if ( a[i][j] )
h[j] = 0;
else
++h[j];
}
for ( j = 1; j <= n; ++j )
{
l[j] = j;
while ( l[j] -1 >= 1 && h[l[j] - 1] >= h[j] )
l[j] = l[l[j] - 1];
}
for ( j = n; j >= 1; --j )
{
r[j] = j;
while ( r[j] + 1 <= n && h[r[j]+1] >= h[j] )
r[j] = r[r[j]+1];
}
for ( j = 1; j <= n; ++j )
{
int t = (r[j]-l[j]+1)*h[j];
if ( t > ans )
ans = t;
}
}
printf("%d\n", ans);
}
return 0;
}
分享到:
相关推荐
标题中的“求一矩阵中子矩阵的最大和”是一个经典的计算机科学问题,通常称为“找到一个矩阵中的最大子矩阵和”。这个问题在数据结构和算法领域有着广泛的应用,特别是在处理大规模数据时寻找局部最优解的问题上。 ...
设矩阵的大小为矩阵中所有元素的和,现输入一个N*N的矩阵,请设计算法计算最大的非空(大小至少是1*1)子矩阵的大小。 例如4×4的矩阵为: 1 0 1 1 1 1 1 1 1 1 1 1 0 1 -6 -8 其最大子矩阵为: 1 0 1 1 1 1 1 1 1 1...
在这个任务中,"01矩阵"指的是所有元素只包含0和1的矩阵,而"互斥"意味着在子矩阵内的任意两个元素不能同时为1。 最大01互斥矩阵问题是一个经典的计算机科学问题,它与图论、组合优化和动态规划等领域紧密相关。在...
给定1个1000行×20列的0-1矩阵,对于该矩阵的任意1列,其中值为1的元素的数量不超过10%。设有两个非空集合A和B,每个集合由矩阵的若干列组成。集合A和B互斥是指对于矩阵的任意一行,同时满足下列2个条件:1)若A中有...
0-1背包问题和矩阵连乘是两种在计算机科学中常见的优化问题,它们涉及到算法设计与分析,特别是动态规划和回溯法的应用。在这里,我们将深入探讨这两个主题,并结合实验报告来理解它们的核心概念和解决方案。 **0-1...
1. 单位矩阵:所有对角线元素为1,非对角线元素为0的矩阵,记为I。 2. 对角矩阵:除了对角线元素外,其他元素均为0的矩阵。 3. 对称矩阵:矩阵与其转置相等的矩阵。 4. 正交矩阵:矩阵的行向量或列向量互相正交,...
对数组或矩阵进行逐行或者逐列归一化处理(0-1),消除不同数据的量纲带来的误差,便与数据分析和回归方程建立,观察变量间变化趋势。
1. **数组与矩阵**: - 在C语言中,矩阵可以表示为二维数组。数组是由相同类型的数据元素组成的集合,而在二维数组中,这些元素按行和列排列,形成一个矩形结构。定义二维数组的基本语法是`类型 名称[行数][列数]`...
本次的主题涉及到寻找矩阵中的最大和次大奇数,以及求解7x7矩阵的边框值。这两个小程序分别对应了数值处理和矩阵操作的基本技能。 首先,让我们详细讨论如何找出5x5矩阵中的最大和次大奇数,以及计算次大奇数的阶乘...
鞍点算法的基本思路是遍历矩阵的每一个元素,对比其在同一行中的最大值以及同一列的最小值。我们可以使用两层循环实现这个过程,外层循环遍历每一行,内层循环遍历对应行的每个元素。在遍历过程中,我们需要维护两个...
对于一个m×n矩阵A,如果存在一个r阶子式不等于0,且所有的(r+1)阶子式都等于0,则称矩阵A的秩为r,记作R(A) = r。 #### 五、特征值与特征向量 对于方阵A,如果存在一个非零向量x和一个标量λ,使得Ax = λx,则称...
1)从第k行、第k列开始的右下角子阵中选取绝对值最大的元素,并记住次元素所在的行号和列号,在通过行交换和列交换将它交换到主元素位置上。 2)m(k, k) = 1 / m(k, k) 3)m(k, j) = m(k, j) * m(k, k),j = 0, 1,...
逆矩阵A^-1满足AA^-1 = A^-1A = I,其中I是单位矩阵,它的主对角线元素都是1,其他元素都是0。 5. **矩阵求秩**:矩阵的秩(rank)是矩阵中非零行(列)的最大数目。对于方阵,如果秩等于其阶数,那么矩阵是满秩的...
对于实对称矩阵A,其每一个特征值都是实数,并且可以通过求解特征方程|A - λI| = 0来得到,其中I是单位矩阵。实对称矩阵的一个关键性质是它可以被对角化,也就是说,存在一个正交矩阵P,使得P^TAP是一个对角矩阵D,...
1. 单位矩阵:主对角线上的元素都是1,其余元素都是0的方阵。 2. 对称矩阵:关于主对角线对称的矩阵,即A的转置等于A。 3. 反对称矩阵:A的转置等于-A。 4. 正交矩阵:矩阵的列向量组是标准正交向量组,即A的转置...
在实际应用中,可能还需要考虑其他类型的矩阵模,如1范数(行和的最大值)、2范数(最大特征值的平方根)和无穷范数(最大列和)。但在这里,我们主要关注了Frobenius范数,因为它是最容易理解和计算的。 总的来说...
- **单位矩阵**:主对角线上元素均为1,其余元素为0的方阵。 - **零矩阵**:所有元素均为0的矩阵。 - **对称矩阵**:满足\(A = A^T\)的方阵,即矩阵与其转置矩阵相等。 - **反对称矩阵**:满足\(A = -A^T\)的方阵,...
1. 矩阵的秩:矩阵的最大线性无关行(列)组的元素个数,反映了矩阵的“线性独立”程度。 2. 零空间:所有被矩阵映射为零向量的向量集合,是线性方程组解的空间。 六、特征值与特征向量 1. 特征值:对于方阵A,如果...
矩阵的1范数(也称为行范数)是矩阵所有行向量1范数的最大值,而∞范数(也称为列范数)是所有列向量∞范数的最大值。 向量范数在序列收敛性方面也有重要作用。如果一个向量序列在某种范数下收敛,即序列中的元素...
如果一个n阶方阵A的行列式不等于0,则称A为非奇异矩阵,存在唯一的逆矩阵A^(-1),满足AA^(-1) = A^(-1)A = I,其中I为单位矩阵。计算逆矩阵的方法有高斯-约旦消元法、伴随矩阵法等。其中高斯-约旦消元法是一种常用的...