【百练】护林员盖房子
护林员盖房子
百练 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.csdn.net/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*/
【百练】护林员盖房子相关推荐
- 算法练习 护林员盖房子
声明:没有OJ能跑,代码仅供思路参考,如有疑问,欢迎一起讨论 题目来源:百练2019信科研究生上机测试 题目:A:护林员盖房子 总时间限制: 1000ms 内存限制: 65536kB 描述 在一片保护 ...
- 算法题:护林员盖房子(C++)
准备机试时发现有的学校不能用java,为保险只好把C++再翻出来.后来又发现有的学校不能用VS?只能再把Dev C++翻出来. ------------------------------------ ...
- 程序员多久才能在北京买房子?百练OJ:4022:买房子
百练OJ:4022:买房子 题目链接:4022:买房子 描述 某程序员开始工作,年薪N万,他希望在中关村公馆买一套60平米的房子,现在价格是200万,假设房子价格以每年百分之K增长,并且该程序员未来年 ...
- 百练(十三~十六)题解
百练(十三) Bailian2806 公共子序列[最长公共子序列+DP] - 海岛Blog - CSDN博客 Bailian3143 验证"歌德巴赫猜想"[筛选法]_海岛Blog- ...
- Python入门习题(69)——OpenJudge百练习题:买房子
OpenJudge百练第4022号习题:买房子 题目描述 解题思路 参考答案 测试用例 小结 题目描述 来源 OpenJudge网站 – 百练习题集-第4022号习题 要求 总时间限制: 1000ms ...
- 百练,4103,踩方格
百练,4103,踩方格 普通做法:(也可以找规律) #include #include//要调用memset函数,头文件 using namespace std; int visited[50][50 ...
- 未来,机器人帮你盖房子
近年,智能机器人应用日趋广泛和深入.种种迹象表明,"机器人革命"已经来临,人类社会正加速进入一个高度自动化的新时代. 去年9月,碧桂园宣布正式进军机器人领域,重点攻关建筑机器人.服 ...
- 通过细胞自动机,AI在「我的世界」学会了盖房子
子豪 发自 凹非寺 量子位 报道 | 公众号 QbitAI 了解游戏「我的世界(MineCraft)」的读者,一定很熟悉这样的画面. △图源:Science Magazine 但是,如果盖房子的不是人 ...
- 北大OJ百练——4075:矩阵旋转(C语言)
百练的这道题很简单,通过率也达到了86%,所以我也就来贴个代码了...下面是题目: 不过还是说一下我的思路: 这道题对一个新来说,可能是会和矩阵的转置相混淆,这题并不是要我们去求矩阵的转置. 这题,我 ...
最新文章
- 「杂谈」如何系统性地学习生成对抗网络GAN
- Battery Historian 使用常用命令
- eclipse使用tomcat进行部署时编译代码不一致的处理
- Android --- 两种设置字体加粗的方法
- 【数据结构与算法】之深入解析“灯泡开关”的求解思路与算法示例
- 访百度奥运logo设计师李兴钢:虚实之间最美的呈现
- oracle触发器不允许修改数据库,Oracle数据库使用触发器记录表数据修改记录
- c语言分配内存空间方法,C语言之动态分配内存空间
- hdu 1525 Euclid‘s Game
- ubuntu安装jdk语句_JDK 12:实际中的切换语句/表达式
- 关闭IOS更新功能(ios4/5/6)
- 强悍的命令行 —— 磁盘空间的查看与磁盘空间的释放
- pythonindex函数输出字符首次出现位置_返回指定的字符串首次出现的位置
- html页面内容的收缩和展开效果
- linux 学习决心书
- java 消息推送的几种方式比较
- 如何在手机APP中通过H5方式集成监控摄像头实时直播画面
- 【C语言】一文带你简单了解C语言
- JVM和操作系统的关系是什么?
- jupyter的安装步骤
热门文章
- selenium设置浏览器的大小和位置
- Springboot中引入本地jar包,并通过maven打包(解决maven丢包的问题)
- MSP430通过IAR下载时出现的Failed to load debugee: C:\XX\XXIAR\Release\Exe\Wireless measurement.txt无法下载程序的问题
- HTML结构及常用的标签
- 豆腐的做法与编辑的文风
- HBase启动成功,但不能访问Web页面
- VS2019使用EasyX实现简单图形界面功能
- 定位首款弹幕K歌软件 阿里鲸鸣未来究竟能够走多远?
- 云数据库有什么用?有了云服务器为什么还要云数据库?
- 手机打电话提示无法连接到移动网络