算法题:护林员盖房子(C++)

准备机试时发现有的学校不能用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 >> 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值