【百练】护林员盖房子

护林员盖房子 C++ 具体思路: 建立二维数组,把空地标为1,有树标为0; 统计a[i][j]的行中向前数最大长度,如0111,记为0123; 设置width,length,遍历a[i][j],行内有length = a[i][j],width = 1; 再遍历列,length = min{a[i][j]},width++; //2020-11-2 #include <iostream> using namespace std; int main() { int x, y; int a[21][21] = .. 阅读详情

护林员盖房子

百练 2019信科研究生上机测试 A

总时间限制: 

1000ms

内存限制: 

65536kB

描述

在一片保护林中,护林员想要盖一座房子来居住,但他不能砍伐任何树木。 
现在请你帮他计算:保护林中所能用来盖房子的矩形空地的最大面积。

输入

保护林用一个二维矩阵来表示,长宽都不超过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和height的乘积最大值。

而最大子矩阵和是以遍历原矩阵n*m的列(1~n)首尾的所有可能,把这些列的元素相加成一个1*n的向量,再计算最大子段和。

最大子段和/最大子矩阵和传送门:https://blog.youkuaiyun.com/coderwait/article/details/89676714

#include<stdio.h>
#include<memory.h>
const int size = 21;
int max(int a, int b){
	return a>b?a:b;
}
int min(int a,int b){
	return a>b?b:a;
}
int main(void)
{
	int m,n;
	int a[size][size];
	memset(a,0,sizeof(a));
	scanf("%d%d",&m,&n);
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			scanf("%d",&a[i][j]);
		}
	}
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			if(a[i][j]==0) a[i][j]=a[i][j-1]+1;
			else a[i][j]=0;
		}
	}
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			printf("%d",a[i][j]);
		}
		printf("\n");
	}
	int ans = 0;
	int width; 
	//遍历每一个位置,向上回溯的方式,求以该位置为最下角的树群的最大值 
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			if(a[i][j]!=0){//如果是树,跳过 
				width=a[i][j];//设置为当前的宽度 
				ans = max(ans,width*1);
				for(int k=i-1;k>=1;k--){
			 		if(a[k][j]==0){//如果搜到树,则说明不用再往上了
			 			break;
					 }
					 else{//如果没有搜到树,更新宽度,继续进行 
					 	width = min(width,a[k][j]);
					 	//printf("宽度:%d 高度:%d\n",width,(i-k+1)); 
					 	ans = max(ans,width*(i-k+1));//注意别搞成负数 
					 }
				}
			}
			 
		}
	} 
	printf("%d\n",ans);
	return 0;
 } 
 /*
 4 5
0 1 0 0 1
0 1 0 0 1
0 0 0 0 0
0 1 0 0 1
 */

 

护林员盖房子 来源 2017医学部计算概论-期末考试-申博 描述 在一片保护林中,护林员想要盖一座房子来居住,但他不能砍伐任何树木。 现在请你帮他计算:保护林中所能用来盖房子的矩形空地的最大面积。 关于输入 输入: 保护林用一个二维矩阵来表示,长宽都不超过20(即<=20)。 第一行是两个正整数m,n,表示矩阵有m行n列。 然后是m行,每行n个整数,用1代表树木,用0表示空地。 关于输出 输出: 一个正整数,表示保护林中能用来盖房子的最大矩形空地面积。 例子输入 4 5 0 1 0 1 1 0 1 0 0 1 0 阅读详情

相关推荐

R语言 | 关联规则

关联规则(AssociationRules)是无监督的机器学习方法,用于知识发现,而非预测。 关联规则的学习器(learner)无需事先对训练数据进行打标签,因为无监督学习没有训练这个步骤。缺点是很难对关联规则学习器进行模型评估,一般都可以通过肉眼观测结果是否合理。 关联规则主要用来发现Pattern,最经典的应用是购物篮分析,当然其他类似于购物篮交易数据的案例也可以应用关联规则进行模式发现。

I think so I am 10万+

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

准备机试时发现有的学校不能用java,为保险只好把C++再翻出来。后来又发现有的学校不能用VS?只能再把Dev C++翻出来。 ———————————————————————————————————————————— 题目:护林员盖房子 描述 在一片保护林中,护林员想要盖一座房子来居住,但他不能砍伐任何树木。 现在请你帮他计算:保护林中所能用来盖房子的矩形空地的最大面积。 输入 保护林...

fun_always的博客 2157

手机拍照也能玩高光谱?教你用TensorFlow Lite在Android上实现实时RGB转高光谱

本文介绍了如何利用TensorFlow Lite在Android设备上实现实时RGB到高光谱的图像重构技术。通过深度学习模型优化和移动端部署策略,使智能手机具备专业级光谱分析能力,适用于农业检测、化妆品分析等多个领域。

weixin_29091105的博客 245

北大百炼

护林员盖房子 总时间限制: 1000ms 内存限制: 65536kB 描述 在一片保护林中,护林员想要盖一座房子来居住,但他不能砍伐任何树木。 现在请你帮他计算:保护林中所能用来盖房子的矩形空地的最大面积。 输入 保护林用一个二维矩阵来表示,长宽都不超过20(即<=20)。 第一行是两个正整数m,n,表示矩阵有m行n列。 然后是m行,每行n个整数,用1代表树木,用0表示空地。...

xueying_2017的博客 2367

Codex全网避坑实录|境外手机号封禁\+Ollama千问适配失败\+第三方中转站TOML全套配置

原生Codex:国内手机号百分百无法登录,PIN验证、多因子验证全部无效,不用尝试API Key登录:仅解锁界面,不充值无法使用功能,纯过渡方案Ollama本地千问:原生接口和Codex不兼容,手写Python代理大概率调试失败,不推荐折腾网页解析失败:只改wire_api为responses即可解决,无需修改接口地址使用建议:仅体验功能用中转站;长期办公提效,成本很高,建议改用兼容接口的本地模型。

驽马不舍 1894

持续集成介绍及Jenkins自动化测试部署

学习持续集成及jenkins的自动化测试部署

ouihsiad的博客 4575

计算概论A代码总结Ⅲ(动态规划类-热身篇)

本文将省略过多的赘述动态规划的基本原理,主要谈谈笔者在复习过程中对DP的理解。

m0_72793230的博客 253

Power Bi数据分析案例:在线零售平台销售数据分析

该数据集为,涵盖2023年1月至2024年3月,包含用户群体特征、购买行为、产品偏好以及参与度指标。用户维度:Customer_ID,Age,Gender,City产品维度:Product_Category,Unit_Price事实表:Order_ID,Quantity,Total_Amount,Discount_Amount,Rating,Delivery_Time在Power Query当中处理销售日期列,并新增年龄段、浏览页面分段列。

2301_79586168的博客 1278

算法练习 护林员盖房子

声明:没有OJ能跑,代码仅供思路参考,如有疑问,欢迎一起讨论 题目来源:百练2019信科研究生上机测试 题目:A:护林员盖房子 总时间限制: 1000ms 内存限制: 65536kB 描述 在一片保护林中,护林员想要盖一座房子来居住,但他不能砍伐任何树木。 现在请你帮他计算:保护林中所能用来盖房子的矩形空地的最大面积。 输入 保护林用一个二维矩阵来表示,长宽都不超过20(即<=20)。 第一...

liuHuaWei5909的博客 1775

手把手教你用开源EtherCAT协议栈SOEM开发从站设备(附避坑指南)

本文详细介绍了如何使用开源EtherCAT从站协议栈SOES进行嵌入式设备开发。内容涵盖从环境搭建、硬件准备到核心的对象字典与PDO映射配置,并重点分享了主循环集成、状态机处理以及实战调试中的常见问题与避坑指南,旨在帮助开发者高效实现设备接入工业现场总线网络。

linux的博客 627

高频网络协议与编程IO相关面试基本问题和知识点整理

网络IO相关基本高频面试基本问题和知识点整合

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 173万+

从伐木人到护林员 国研政情·谋定论道-米玛次仁:风雨无阻足迹

从伐木人到护林员 国研政情·谋定论道-米玛次仁:风雨无阻足迹

赢在商道·中国营销企划 485

机器视觉应用工程师职位深度解析与面试指南

广东奥普特科技招聘机器视觉应用工程师,要求大专以上理工科专业背景,熟悉C/C++或PLC编程,具备自动化设备调试经验。岗位职责包括视觉项目方案评估、系统安装调试、售后技术支持及异常处理,需接受外派出差。该职位面向专业对口的应届生或实习生,强调动手能力、沟通技巧和吃苦耐劳精神。机器视觉工程师需掌握图像处理算法、硬件配置等核心技术,在工业自动化领域具有良好发展前景。求职者应注重编程能力和实践经验的积累,以胜任这一技术密集型岗位。

郑伟强dev的专栏 431

19A-护林员盖房子

百练机试

weixin_49403900的博客 311

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

盖房子

<br />【Vijos 1057】盖房子Vijos 2009-11-02 20:50:54 阅读26 评论0 字号:大中小 订阅 .<br />描述 Description<br />永恒の灵魂最近得到了面积为n*m的一大块土地(高兴ING^_^),他想在这块土地上建造一所房子,这个房子必须是正方形的。 <br />但是,这块土地并非十全十美,上面有很多不平坦的地方(也可以叫瑕疵)。这些瑕疵十分恶心,以至于根本不能在上面盖一砖一瓦。 <br />他希望找到一块最大的正方形无瑕疵土地来盖房子。 <br

742

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

CSU 1813 盖房子

Description Bobo 在 ICPCCamp 买了一块 n×m 的土地,其中有些格子是障碍。 他想选择两个矩形区域,建造两座房子。 很明显,用于盖房子的区域不能包含障碍。同时,两个区域不能相交(但是可以相邻)。 Bobo 想知道所有可能不同方案的数量除以 (109+7) 的余数。 Input 输入包含不超过 10 组数据。 每组数据的第一行包含两个整数 n,m

Occult 1029

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

[vijos1057]盖房子

描述永恒の灵魂最近得到了面积为n*m的一大块土地(高兴ING^_^),他想在这块土地上建造一所房子,这个房子必须是正方形的。但是,这块土地并非十全十美,上面有很多不平坦的地方(也可以叫瑕疵)。这些瑕疵十分恶心,以至于根本不能在上面盖一砖一瓦。他希望找到一块最大的正方形无瑕疵土地来盖房子。不过,这并不是什么难题,永恒の灵魂在10分钟内就轻松解决了这个问题。现在,您也来试试吧。输入格式输入文件第一行为两

dxyinme-Zz 482

vijos 1057 盖房子

描述永恒の灵魂最近得到了面积为n*m的一大块土地(高兴ING^_^),他想在这块土地上建造一所房子,这个房子必须是正方形的。 但是,这块土地并非十全十美,上面有很多不平坦的地方(也可以叫瑕疵)。这些瑕疵十分恶心,以至于根本不能在上面盖一砖一瓦。 他希望找到一块最大的正方形无瑕疵土地来盖房子。 不过,这并不是什么难题,永恒の灵魂在10分钟内就轻松解决了这个问题。 现在,您也来试试吧。 格式输

折戟沉沙 697

CillyB盖房子

描述 一天 CillyB想盖一座房子,于是他要弄到一些木材。 假设有一片森林,里面有n棵树,每棵树都有一定的高度。 CillyB有一台伐木机,这台伐木机可以在森林里收集木材。收集的方式是这样的,假设在进入森林前,CillyB将齿轮固定在了m高度,那么对于森林里的每棵树,都会将收集m高度以上的木材。 比如说一棵树的高度是5,CillyB齿轮高度是3,那么他将收集到长度为2的木材,即,留下

shyoldman的博客 424

|Vijos|动态规划|P1057 盖房子

https://vijos.org/p/1057 设f[i][j]为以i,j为正方形右下顶点的最大边长 不难得出初始值 f[i][j] = a[i][j] ,a为输入数组 则有状态转移方程 f[i][j] = min(f[i-1][j], f[i-1][j-1], f[i][j-1]); 因为f[i][j]只能从这些点得出  #include #include #include #i

博客停更,请到"再见,优快云"文章中找新博客地址 734

C++ 考试易错点

结构体数组的数据交换,则所有数据都交换 例如 交换a.data和b.data,则相应的a.index和b.index也会自动就交换 注意数组应该开多大 题目没有明确表示就开大点吧 使用循环嵌套时,注意变量不要重复!不要打错 i j k 注意输出方式,输入如果有逗号要考虑char ch,有空格需要考虑cin.get(ch) ...

有趣的人 304
上一篇: 【机试】ZOJ问题 (规律)
下一篇: 【模板】矩阵二分求幂
coderwait
博客等级 码龄9年 20粉丝 210原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值