一开始把题目意思理解错啦,做那好久没做出来。本题是一个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. 使用 Region,RegionManager 在 XNA 中创建特殊区域(十八)

    平方已经开发了一些 Windows Phone 上的一些游戏,算不上什么技术大牛.在这里分享一下经验,仅为了和各位朋友交流经验.平方会逐步将自己编写的类上传到托管项目中,没有什么好名字,就叫 WPXN ...

  2. git+jenkins持续集成一:git上传代码

    先注册一个账号,注册地址:https://github.com/ 记住地址 下载git本地客户端,下载地址:https://git-scm.com/download/win 一路next傻瓜安装,加入 ...

  3. jquery怎样获取html页面中的data-xxx

    $(this).attr("data-id") // will return the string "123"or .data() (if you use ne ...

  4. 浏览器不支持JavaScript怎么办

    使用  noscript 标签,给用户提醒即可 <body> <noscript>需要js支持</noscript> </body>

  5. windows杀死进程netstat

    1.找到端口被占用情况 netstat -aon|findstr "9050" 协议    本地地址                     外部地址               ...

  6. java的图像界面

    package test; import java.awt.FlowLayout; import java.awt.event.ActionListener; import java.awt.even ...

  7. 关于ofbiz13.07和ofbiz14.12部署的问题解决方法

    必备软件 Jdk7 文件名:java_ee_sdk-6u4-jdk7-windows.exe eclipse MySQL Installer 5.6 for Windows MySql Connect ...

  8. [AGC004F] Namori

    Description 现在给你一张N个点M条边的连通图,我们保证N−1≤M≤N,且无重边和自环. 每一个点都有一种颜色,非黑即白.初始时,所有点都是白色的. "全"想通过执行若干 ...

  9. [LeetCode] Remove Nth Node From End of List 快慢指针

    Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...

  10. 小甲鱼PE详解之资源(PE详解11)

    原文出自:www.fishc.com 最近一直在安排第一届鱼C 学习班的事情,忙活了好一阵子,真是对不住大家,还大家久等了,这里要跟大家说声不好意思 ^_^ 今天我们来谈谈资源部分,资源部分可以说是 ...