题目地址:http://ac.jobdu.com/problem.php?pid=1497

题目描述:

在一个M * N的矩阵中,所有的元素只有0和1,从这个矩阵中找出一个面积最大的全1子矩阵,所谓最大是指元素1的个数最多。

输入:

输入可能包含多个测试样例。

对于每个测试案例,输入的第一行是两个整数m、n(1<=m、n<=1000):代表将要输入的矩阵的大小。

矩阵共有m行,每行有n个整数,分别是0或1,相邻两数之间严格用一个空格隔开。

输出:

对应每个测试案例,输出矩阵中面积最大的全1子矩阵的元素个数。

样例输入:
2 2
0 0
0 0
4 4
0 0 0 0
0 1 1 0
0 1 1 0
0 0 0 0
样例输出:
0
4
来源:
腾讯2012年暑期实习生招聘面试二面试题

#include <stdio.h>
#include <string.h>
#include <stdlib.h> #define max(a,b) (a > b ? a : b)
#define min(a,b) (a < b ? a : b)
#define MAXN 1001 int matrix[MAXN][MAXN];
int lagest_rectangle(/*int **matrix, */int m, int n) {
int i, j;
int *H = (int*) malloc(n * sizeof(int)); // 高度
int *L = (int*) malloc(n * sizeof(int)); // 左边界
int *R = (int*) malloc(n * sizeof(int)); // 右边界
int ret = 0;
memset(H, 0, n * sizeof(int));
memset(L, 0, n * sizeof(int));
for (i = 0; i < n; i++) R[i] = n;
for (i = 0; i < m; ++i) {
int left = 0, right = n;
// calculate L(i, j) from left to right
for (j = 0; j < n; ++j) {
if (matrix[i][j] == 1) {
++H[j];
L[j] = max(L[j], left);
} else {
left = j + 1;
H[j] = 0;
L[j] = 0;
R[j] = n;
}
}
// calculate R(i, j) from right to left
for (j = n - 1; j >= 0; --j) {
if (matrix[i][j] == 1) {
R[j] = min(R[j], right);
ret = max(ret, H[j] * (R[j] - L[j]));
}
else {
right = j;
}
}
}
return ret;
}
int main() {
int m, n;
int i, j;
while (scanf("%d%d", &m, &n) > 0) {
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &matrix[i][j]);
}
}
printf("%d\n", lagest_rectangle(m, n));
}
return 0;
}

POJ上相似的题目:http://poj.org/problem?id=3494

参考资料:http://wenku.baidu.com/view/728cd5126edb6f1aff001fbb.html

https://github.com/soulmachine/acm-cheat-sheet

九度OJ 1497 面积最大的全1子矩阵 -- 动态规划的更多相关文章

  1. 面积最大的全1子矩阵--九度OJ 1497

    题目描述: 在一个M * N的矩阵中,所有的元素只有0和1,从这个矩阵中找出一个面积最大的全1子矩阵,所谓最大是指元素1的个数最多. 输入: 输入可能包含多个测试样例.对于每个测试案例,输入的第一行是 ...

  2. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  3. 九度oj 题目1087:约数的个数

    题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...

  4. 九度OJ 1502 最大值最小化(JAVA)

    题目1502:最大值最小化(二分答案) 九度OJ Java import java.util.Scanner; public class Main { public static int max(in ...

  5. 九度OJ,题目1089:数字反转

    题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转. 输入: 第一行一个正整数表示测试数据的个数n. ...

  6. [Jobdu] 题目1497:面积最大的全1子矩阵

    题目描述: 在一个M * N的矩阵中,所有的元素只有0和1,从这个矩阵中找出一个面积最大的全1子矩阵,所谓最大是指元素1的个数最多. 输入: 输入可能包含多个测试样例.对于每个测试案例,输入的第一行是 ...

  7. 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)

    题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...

  8. 九度OJ 1531 货币面值(网易游戏2013年校园招聘笔试题) -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1531 题目描述: 小虎是游戏中的一个国王,在他管理的国家中发行了很多不同面额的纸币,用这些纸币进行任意的组合可以在 ...

  9. 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)

    题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述:     省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但 ...

随机推荐

  1. inferred 和 freefrom

    “Inferred” is the default setting for storyboards and it means the scene will show a navigation bar ...

  2. iOS使用宏写单例

    本文只介绍ARC情况下的单例 过去一直背不下来单例如何写,就是知道这么回事,也知道通过宏来写单例,但是一直记不住,今天就来记录一下 - (void)viewDidLoad {     [super v ...

  3. android学习日记26--AIDL之进程间的通信

    1.AIDL介绍 AIDL:Android Interface Definition Language,即Android接口定义语言. 由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运 ...

  4. MSSQL计算日期方法大全

    通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天.你们大部分人大概都知道怎样把日期进行分割(年.月.日等),然后仅仅用分割出来的年.月.日等放在几个函 ...

  5. QUiLoader 动态加载.ui文件

    动态加载UI文件是指,用 Qt Designer 通过拖拽的方式生产.ui 文件.不用 uic工具把.ui 文件变成等价的 c++代码,而是在程序运行过程中需要用到UI文件时,用 QUiLoader ...

  6. mysql之sql语句细节问题汇总

    一.mysql count distinct null 使用注意事项 1  用一个例子来讲解一个问题,现在又一个库表hello,表内容如下: id     name 1      Null 2     ...

  7. java_jdbc_可变参数_MetaData

    异常处理参考3层解耦 ublic class ScrollTest { public static void main(String[] args) throws SQLException { // ...

  8. global 用法

    <?php//$GLOBALS['he']="hechunhuae";function Test(){ //global $he; $GLOBALS['he']=" ...

  9. C语言枚举

    应该是 各种语言都支持枚举的. 所以这个 之前在我们java案例里面就出现过的季节代码再次出现了. 枚举帮我们起到一个变量值,在某一范围内的限定,用来避免一些非法值的键入. 值得注意的是,这里面的枚举 ...

  10. Html5 audio stop

    //html5 stop audio play function stopPlay(el){ el.pause(); el.currentTime = 0; } 使用: var el = docume ...