准备机试时发现有的学校不能用java,为保险只好把C++再翻出来。后来又发现有的学校不能用VS?只能再把Dev C++翻出来。
————————————————————————————————————————————
题目:护林员盖房子
描述
在一片保护林中,护林员想要盖一座房子来居住,但他不能砍伐任何树木。
现在请你帮他计算:保护林中所能用来盖房子的矩形空地的最大面积。
输入
保护林用一个二维矩阵来表示,长宽都不超过20(即<=20)。
第一行是两个正整数m,n,表示矩阵有m行n列。
然后是m行,每行n个整数,用1代表树木,用0表示空地。
输出
一个正整数,表示保护林中能用来盖房子的最大矩形空地面积。
样例输入
4 5 0 1 0 1 1 0 1 0 0 1 0 0 0 0 0 0 1 1 0 1
样例输出
5
提示
子矩阵边长可以为1,也就是说:
0 0 0 0 0
依然是一个可以盖房子的子矩阵。
————————————————————————————————————————————
思路:就是求一个矩阵中的最大子矩阵,遍历两次即可。第一次:求出每个位置的最大连续区间;第二次:求出每个点向上的最大矩阵面积。要点:矩阵面积的求法用width*longth,width初值为1,每向上回溯一次width加一。
code:
#include<iostream>
#include<vector>
#include<algorithm>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
int main() {
int m;
int n;
int map[21][21] = {0};
cin >>