一开始把题目意思理解错啦,做那好久没做出来。本题是一个dp问题;题目说列可以无限次对换,设矩阵为M[i][j],要找到面积大的矩形其实就是处理连续1的个数问题,用d[i][j](i表示行,j表示列)表示第i行从元素M[i][j]按列向下连1的个数,然后数组d[i]表示啦第i行向下连续1的个数的集合,对d[i]做一次sort从小到大排序,得到高度为d[i][1]到d[i][n]底边长度为1的小矩形,然后以第i行为基构成矩形的最大面积为s[i]=max{(n+1-j)*d[i][j]}(0<j<n+1),通过d[i][j]的意义可知:

if(M[i][j]==0)  d[i][j]=0;if(M[i][j]==1) d[i][j]=d[i+1][j],计算d[i][j]的方法为从后向前,一步一步计算。算法时间复杂度为n*mlogn

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
#define max 1002
int M[max][max];
int dp[max][max];
int DP(int m, int n);
int main(){
int i, j, m, n;
string s;
while (cin >> m >> n){
for (i = 1; i <= m; i++){
cin >> s;
for (j = 0; j < n; j++)
M[i][j + 1] = s[j] - '0';
}
cout<<DP(m, n) << endl;
}
return 0;
}
int DP(int m, int n){
int i, j;
memset(dp, 0, sizeof(dp));
for (i = 1; i <= n; i++)
dp[m][i] = M[m][i];
for (i = m - 1; i >= 1; i--)
for (j = 1; j <= n; j++){/*从下向上计算d[i][j]*/
if (!M[i][j])
dp[i][j] = 0;
else
dp[i][j] = dp[i + 1][j] + 1;
}
int Max = 0;
for (i = 1; i <= m; i++){
sort(dp[i] + 1, dp[i] + n + 1); //对每一行的d[i][j]排序
for (j = 1; j <= n; j++) /*遍历每一行,找出最大面积存入Max*/
if (Max < dp[i][j] * (n + 1 - j))
Max = dp[i][j] * (n + 1 - j);
}
return Max;
}

HDU2830的更多相关文章

  1. hdu2830 可交换行的最大子矩阵

    题意:       求最大子矩阵,但是相邻的列之间可以相互交换... 思路:       回想下固定的情况,记得那种情况是开俩个数组 L[i] ,R[i],记录小于等于i的最左边和最右边在哪个位置,对 ...

随机推荐

  1. Python-S9-Day127-Scrapy爬虫框架2

    01 今日内容概要 02 内容回顾:爬虫 03 内容回顾:并发和网络 04 Scrapy框架:起始请求定制 05 Scrapy框架:深度和优先级 06 Scrapy框架:内置代理 07 Scrapy框 ...

  2. c语言入门-02-第一个c程序开始

    我们来开我们第一个c代码 #include<stdio.h> int main(){ // print num int num; num = 1; printf("%d\n&qu ...

  3. ACM-ICPC 2018 焦作赛区网络预赛

    这场打得还是比较爽的,但是队友差一点就再过一题,还是难受啊. 每天都有新的难过 A. Magic Mirror Jessie has a magic mirror. Every morning she ...

  4. kvm配置虚拟机[待整理]

    working note 4-12-2016 1,利用libvirt图形虚拟机管理工具virt-manager搭建虚拟机,通过存储池(storage pool )和卷(volume)存放虚拟机镜像(I ...

  5. Struts2请求流程

    1. 一个请求在Struts2框架中的处理步骤: a) 客户端初始化一个指向Servlet容器的请求: b) 根据Web.xml配置,请求首先经过ActionContextCleanUp过滤器,其为可 ...

  6. java实现图的深度优先遍历和广度优先遍

    首先需要知道的是,图的深度优先遍历是一种类似于树的前序遍历方式,即选择一个入口节点,沿着这个节点一直遍历下去,直至所有节点都被访问完毕:如果说,图的深度优先遍历类似于树的前序遍历的话,那么图的广度优先 ...

  7. 一些echarts的基本图形

    先拿一个图形渲染过程举例 引用处 <bar ref="ARPUChart" v-if="ARPUChart" style="width:500p ...

  8. Codeforces Round #363 (Div. 2) B 暴力

    Description You are given a description of a depot. It is a rectangular checkered field of n × m siz ...

  9. Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] D 数学+(前缀 后缀 预处理)

    D. "Or" Game time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  10. svg图片做图标字体

    https://icomoon.io 这个网站,把svg变图标