九度 1497:面积最大的全1子矩阵
题目描述:
在一个M * N的矩阵中,所有的元素只有0和1,从这个矩阵中找出一个面积最大的全1子矩阵,所谓最大是指元素1的个数最多
Leetcode 原题, 没有案例就是跪, WA 到没脾气
代码 未通过九度测试
#include <iostream> #include <stdio.h> #include <vector> #include <deque> #include <memory.h> using namespace std; int m, n; int matrix[1001][1001]; int rectangle[1001]; int largestHis() { int global = 0; deque<int> stack; for(int i = 0; i < n; i ++) { if(!stack.size()) { stack.push_back(i); }else if(stack.back() <= rectangle[i]) { stack.push_back(i); }else { int hei = stack.back(); stack.pop_back(); int left = (stack.empty())? 0:rectangle[stack.back()]; global = max(global, (i-left-1)*rectangle[hei]); i--; } } return global; } int main() { while(scanf("%d%d", &m, &n) != EOF) { for(int i = 0; i < m; i ++) { for(int j = 0; j < n; j ++) { scanf("%d", &matrix[i][j]); } } memset(rectangle, 0, sizeof(rectangle)); int global = 0; for(int i = 0; i < m; i ++) { for(int j = 0; j < n; j ++) { if(matrix[i][j] == 0) { rectangle[j] = 0; }else{ rectangle[j] ++; } //cout << rectangle[j] << " "; } //cout << endl; global = max(global, largestHis()); } cout << global << endl; } return 0; }