`

最大0 1矩阵

J# 
阅读更多

题目来源: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 行每行均有N01 ,相邻两数间严格用一个空格隔开

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)子矩阵的大小

    设矩阵的大小为矩阵中所有元素的和,现输入一个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互斥矩阵测试用例

    在这个任务中,"01矩阵"指的是所有元素只包含0和1的矩阵,而"互斥"意味着在子矩阵内的任意两个元素不能同时为1。 最大01互斥矩阵问题是一个经典的计算机科学问题,它与图论、组合优化和动态规划等领域紧密相关。在...

    c++深度优先搜索的回溯法实现多集合矩阵互斥问题

    给定1个1000行×20列的0-1矩阵,对于该矩阵的任意1列,其中值为1的元素的数量不超过10%。设有两个非空集合A和B,每个集合由矩阵的若干列组成。集合A和B互斥是指对于矩阵的任意一行,同时满足下列2个条件:1)若A中有...

    0-1背包 矩阵连乘

    0-1背包问题和矩阵连乘是两种在计算机科学中常见的优化问题,它们涉及到算法设计与分析,特别是动态规划和回溯法的应用。在这里,我们将深入探讨这两个主题,并结合实验报告来理解它们的核心概念和解决方案。 **0-1...

    工程矩阵理论11 工程矩阵理论11 工程矩阵理论11

    1. 单位矩阵:所有对角线元素为1,非对角线元素为0的矩阵,记为I。 2. 对角矩阵:除了对角线元素外,其他元素均为0的矩阵。 3. 对称矩阵:矩阵与其转置相等的矩阵。 4. 正交矩阵:矩阵的行向量或列向量互相正交,...

    MATLAB针对数组或矩阵的行列归一化处理(0-1)代码

    对数组或矩阵进行逐行或者逐列归一化处理(0-1),消除不同数据的量纲带来的误差,便与数据分析和回归方程建立,观察变量间变化趋势。

    找矩阵最大值.rar(C语言版)

    1. **数组与矩阵**: - 在C语言中,矩阵可以表示为二维数组。数组是由相同类型的数据元素组成的集合,而在二维数组中,这些元素按行和列排列,形成一个矩形结构。定义二维数组的基本语法是`类型 名称[行数][列数]`...

    矩阵中的最大和次大的奇数

    本次的主题涉及到寻找矩阵中的最大和次大奇数,以及求解7x7矩阵的边框值。这两个小程序分别对应了数值处理和矩阵操作的基本技能。 首先,让我们详细讨论如何找出5x5矩阵中的最大和次大奇数,以及计算次大奇数的阶乘...

    矩阵中寻找鞍点_C++_算法_矩阵鞍点算法_鞍点_

    鞍点算法的基本思路是遍历矩阵的每一个元素,对比其在同一行中的最大值以及同一列的最小值。我们可以使用两层循环实现这个过程,外层循环遍历每一行,内层循环遍历对应行的每个元素。在遍历过程中,我们需要维护两个...

    矩阵分析课后习题

    对于一个m×n矩阵A,如果存在一个r阶子式不等于0,且所有的(r+1)阶子式都等于0,则称矩阵A的秩为r,记作R(A) = r。 #### 五、特征值与特征向量 对于方阵A,如果存在一个非零向量x和一个标量λ,使得Ax = λx,则称...

    C#编程多种方法求矩阵的特征值的计算实习报告

    在编程实现时,需要检查系数矩阵的对角元是否为0,以避免分母为0的问题。 3. **QR分解法**: QR分解法是求解实对称矩阵特征值的高效方法,它涉及到矩阵的QR分解,即将矩阵A分解为正交矩阵Q和上三角矩阵R的乘积。...

    矩阵运算(类里包含了对矩阵的一些基本运算程序)

    逆矩阵A^-1满足AA^-1 = A^-1A = I,其中I是单位矩阵,它的主对角线元素都是1,其他元素都是0。 5. **矩阵求秩**:矩阵的秩(rank)是矩阵中非零行(列)的最大数目。对于方阵,如果秩等于其阶数,那么矩阵是满秩的...

    实对称矩阵的每行元素绝对值之和,则特征值小于11

    对于实对称矩阵A,其每一个特征值都是实数,并且可以通过求解特征方程|A - λI| = 0来得到,其中I是单位矩阵。实对称矩阵的一个关键性质是它可以被对角化,也就是说,存在一个正交矩阵P,使得P^TAP是一个对角矩阵D,...

    合肥工业大学矩阵理论课件.zip

    1. 单位矩阵:主对角线上的元素都是1,其余元素都是0的方阵。 2. 对称矩阵:关于主对角线对称的矩阵,即A的转置等于A。 3. 反对称矩阵:A的转置等于-A。 4. 正交矩阵:矩阵的列向量组是标准正交向量组,即A的转置...

    西北工业大学矩阵论试题

    1. 矩阵的秩:矩阵的最大线性无关行(列)组的元素个数,反映了矩阵的“线性独立”程度。 2. 零空间:所有被矩阵映射为零向量的向量集合,是线性方程组解的空间。 六、特征值与特征向量 1. 特征值:对于方阵A,如果...

    计算3X3矩阵模

    在实际应用中,可能还需要考虑其他类型的矩阵模,如1范数(行和的最大值)、2范数(最大特征值的平方根)和无穷范数(最大列和)。但在这里,我们主要关注了Frobenius范数,因为它是最容易理解和计算的。 总的来说...

    矩阵分析 第3版 史荣昌 课后答案

    - **单位矩阵**:主对角线上元素均为1,其余元素为0的方阵。 - **零矩阵**:所有元素均为0的矩阵。 - **对称矩阵**:满足\(A = A^T\)的方阵,即矩阵与其转置矩阵相等。 - **反对称矩阵**:满足\(A = -A^T\)的方阵,...

    向量和矩阵的范数讲义

    矩阵的1范数(也称为行范数)是矩阵所有行向量1范数的最大值,而∞范数(也称为列范数)是所有列向量∞范数的最大值。 向量范数在序列收敛性方面也有重要作用。如果一个向量序列在某种范数下收敛,即序列中的元素...

Global site tag (gtag.js) - Google Analytics