题意:

      求最大子矩阵,但是相邻的列之间可以相互交换...

思路:

      回想下固定的情况,记得那种情况是开俩个数组 L[i] ,R[i],记录小于等于i的最左边和最右边在哪个位置,对于这个题目,可以交换,也就是说顺序是可以自己随意更改的,那么我们直接sort一便,然后在找最大就行了,说下具体过程,便于理解

开始我们创建一个数组dp[i] ,记录第i列到当前j的位置的连续最大子序列,我们假设每一样都是矩形的下低,我们在开个数组tmp记录所有的dp,然后sort,之后可以开个数组L,R什么的,

但也可以不开,因为排序的原因,我们只要这样就行了 

for(j = 1 ;j <= m ;j ++) ans = maxx(ans ,dp[j] * j);(这个是从大到小排序)

或者 for(j = m ;j >= 1 ;j --) ans = maxx(ans ,dp[j] * (m - j + 1));(从小到大)

任选一个都行,无所谓..时间复杂度是O(n * m + lg(m));

#include<stdio.h>
#include<string.h>
#include<algorithm> #define N (1000 + 100)
#define INF -1000000000

using namespace
std; int dp[N];
int
tmp[N];
char
str[N]; int main ()
{
int
n ,m ,i ,j ,num ,ans;
while(~
scanf("%d %d" ,&n ,&m))
{

ans = INF;
memset(dp ,0 ,sizeof(dp));
for(
i = 1 ;i <= n ;i ++)
{

scanf("%s" ,&str);
for(
j = 0 ;j < m ;j ++)
{
if(
str[j] - '0') dp[j+1]++;
else
dp[j+1] = 0;
tmp[j+1] = dp[j+1];
}

sort(tmp + 1 ,tmp + m + 1);
for(int
ii = m ;ii >= 1 ;ii --)
{
if(!
tmp[ii]) break;
if(
ans < tmp[ii] * (m - ii + 1))
ans = tmp[ii] * (m - ii + 1);
}
}

printf("%d\n" ,ans);
}
return
0;
}


hdu2830 可交换行的最大子矩阵的更多相关文章

  1. ZOJ 1074 To the Max(DP 最大子矩阵和)

    To the Max Time Limit: 2 Seconds      Memory Limit: 65536 KB Problem Given a two-dimensional array o ...

  2. 2014NOIP普及组 子矩阵

    觉得题目水的离开 觉得普及组垃圾的请离开 不知道 DFS 和 DP 的请离开 不屑的大佬请离开 ……. 感谢您贡献的访问量 ————————————————华丽的分割线 ——————————————— ...

  3. 51nod 1051 最大子矩阵和

    没想到居然可以O(n3)暴力过 就是大概之前的  最大连续子序列和 加成2维度了  枚举起始列 和 终止列 然后计算从1到n行最大的子矩阵的和 注意n 和 m 的输入顺序!! #include< ...

  4. Hihocoder 1634 Puzzle Game(2017 ACM-ICPC 北京区域赛 H题,枚举 + 最大子矩阵变形)

    题目链接  2017 Beijing Problem H 题意  给定一个$n * m$的矩阵,现在可以把矩阵中的任意一个数换成$p$,求替换之后最大子矩阵的最小值. 首先想一想暴力的方法,枚举矩阵中 ...

  5. [VijosP1764]Dual Matrices 题解

    题目大意: 一个N行M列的二维矩阵,矩阵的每个位置上是一个绝对值不超过1000的整数.你需要找到两个不相交的A*B的连续子矩形,使得这两个矩形包含的元素之和尽量大. 思路: 预处理,n2时间算出每个点 ...

  6. 支持向量机(SVM)非线性数据切割

    支持向量机(SVM)非线性数据切割 1.目标 本指导中你将学到: l  当不可能线性切割训练数据时,如何定义SVM最优化问题. l  在这样的问题上.如何配置CvSVMParams中的參数满足你的SV ...

  7. poj1050(nyoj104 zoj1074)dp问题

    To the Max Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 39913   Accepted: 21099 Desc ...

  8. Python实现im2col和col2im函数

    今天来说说im2col和col2im函数,这是MATLAB中两个内置函数,经常用于数字图像处理中.其中im2col函数在<MATLAB中的im2col函数>一文中已经进行了简单的介绍. 一 ...

  9. Python学习之数组类型一:

    Python学习之数组类型一: Numpy中的向量与矩阵: 1.创建:  向量.矩阵均由array函数创建,区别在于向量是v=array( [逗号分隔的元素] ), 矩阵是M=array( [[ ]] ...

随机推荐

  1. windows跳转端口

    //将客户机端口内网33306转发到外网,在通过本地连接ssh -L 3306:10.0.0.208:3306 ttx@180.180.180.182--通过git bash执行命令--10.0.0. ...

  2. Python编程中可能经常用到的函数

    1.os.walk() 一般用法为 import os ph=r'D:\temp\build' for root,dirs,files in os.walk(ph): print(root,dirs, ...

  3. Just a Joke HDU - 4969(物理+积分)

    题目链接:https://vjudge.net/problem/HDU-4969#author=0 题意:一个人在圆心以V2速度追赶一个以V1的速度进行圆周运动,问在圆心的人能否在不超过D的距离追上他 ...

  4. PTA 二叉树的三种遍历(先序、中序和后序)

    6-5 二叉树的三种遍历(先序.中序和后序) (6 分)   本题要求实现给定的二叉树的三种遍历. 函数接口定义: void Preorder(BiTree T); void Inorder(BiTr ...

  5. (四)SpringBoot启动过程的分析-预处理ApplicationContext

    -- 以下内容均基于2.1.8.RELEASE版本 紧接着上一篇(三)SpringBoot启动过程的分析-创建应用程序上下文,本文将分析上下文创建完毕之后的下一步操作:预处理上下文容器. 预处理上下文 ...

  6. [状压DP]车II

    车 I I 车II 车II 题目描述 有一个 n ∗ m n*m n∗m的棋盘 ( n . m ≤ 80 , n ∗ m ≤ 80 ) (n.m≤80,n*m≤80) (n.m≤80,n∗m≤80)要 ...

  7. Distributed | Google File System

    本文为我读GFS论文后做的总结,包括文件系统的读写流程,和一些重要机制. [Google File System] 设计理念 组件失效被认为是常态事件.GFS包括数百上千台普通设备,在任何时间都有可能 ...

  8. 轻松理解 Java 静态代理/动态代理

    目录 什么是代理模式 定义 代理模式的主要角色 优点 缺点 静态代理 动态代理 JDK原生动态代理 例子 分析 小结 CGLIB动态代理 例子 分析 final类型 其他方案 尾声 理解Java动态代 ...

  9. ognl表达式应用场景和用法

    ognl表达式的用法和应用场景 1.配置文件 //书写方式是:'${@类全限定名@常量}' dic_city.type=${@com.imooc.constant.DictionaryConstant ...

  10. OO_Unit2总结

    OO_Unit2总结 (1) 多线程协同控制设计策略 总体信号通讯策略 本单元作业,我采用的是生产者-消费者模式加类观察者模式. 通过分析指导书给出的需求,我将最终我要实现的程序简化为了"输 ...