动态规划——面积覆盖

Tyvj 1189 盖房子

描述

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

输入格式

输入文件第一行为两个整数n,m(1<=n,m<=1000),接下来n行,每行m个数字,用空格隔开。0表示该块土地有瑕疵,1表示该块土地完好。

输出格式

一个整数,最大正方形的边长。

测试样例1

输入

4 4 
0 1 1 1 
1 1 1 0 
0 1 1 0 
1 1 0 1

输出

2

备注

永恒の灵魂根据经典问题改编(超级弱智题)

思路:

矩形面积覆盖,dp[i][j]表示以(i,j)为右下角的矩形的最大面积,很显然,一个点只有左边上边和斜上一个有矩形才能顺利扩展,如果有一个方向矩形面积小,也不能成功扩展

方程:

dp[i][j] = 1 + min{dp[i-1][j],dp[i][j-1],dp[i-1][j-1]} (map[i][j] is covered)

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<string>
 4 #include<cstring>
 5 #include<algorithm>
 6 using namespace std;
 7 int n,m,a[1005][1005],dp[1005][1005],ans;
 8 int main(){
 9     cin>>n>>m;
10     for(int i = 1;i <= n;i++){
11         for(int j = 1;j <= m;j++){
12             cin>>a[i][j];
13         }
14     }
15     for(int i = 1;i <= n;i++){
16         for(int j = 1;j <= m;j++){
17             if(a[i][j]) dp[i][j] = 1 + min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1]));
18             ans = max(ans,dp[i][j]);
19         }
20     }
21     cout<<ans;
22     return 0;
23 } 

时间: 2024-07-28 18:31:16

动态规划——面积覆盖的相关文章

【最小矩形面积覆盖:凸包+旋转卡壳】UVA 10173 Smallest Bounding Rectangle

[最小矩形面积覆盖:凸包+旋转卡壳]UVA 10173 Smallest Bounding Rectangle 题目链接:UVA 10173 Smallest Bounding Rectangle 题目大意 给你n个点,求能够覆盖所有点集的最小矩形面积. 笔者的第2道凸包题目,凸包 + 旋转卡壳,实现点集的最小矩形面积覆盖问题 ">=0"写成"<=0"坑了我一下午!QAQ 说一下思路 ①Graham's Scan法构建凸包,时间复杂度O(nlogn) ②

nyoj 12——喷水装置二——————【贪心-区间覆盖】

喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿.请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿. 输入 第一行输入一个正整数N表示共有n次测试数据.每一组测试数据的第一行有三个整数n,w,h,n表示共有n个喷水装置,w表示草坪的横向长度,h表示草坪的纵向长度.随后的n行,

Matlab计算多幅遥感影像交集面积占比

一个文件夹中有同一时间不同的遥感影像,有LST NDVI.反射率等,而想要知道这些像元数量相同,填充值和背景值均为nan的影像的交集部分占该影像研究区(已经经过研究区矢量裁剪)的比例,以及不同类别遥感影像的覆盖面积比例,主要目的是想以多种数据交集覆盖面积比例来判断改天是否适合数据反演 1 函数 函数基本结构 function[输出形参表: output1, ...,outptn] = 函数名(输入形参表: input1, ... , inputn) 注释说明部分 函数体代码部分 end 函数名:

计算几何及其应用——解析几何

写在前面:刚学专业课的时候,记得有天突发奇想,心说高三数学的压轴题能不能写个程序跑出答案,这样岂不是解放了数万苦逼高三生的双手?但是当时也仅仅是停留在想法上面,因为高中的解析几何虽然步骤程序化,但是有时候需要灵巧的因式分解,感觉以目前的编程水平还是写不出来,但是了解到数学有一个分支——计算几何,专门利用计算机来进行几何计算的一门科学,并且还与计算机图形学.计算机视觉和图像处理.机器人.计算机辅助设计和制造等高深学科有着联系(摘自<计算几何与应用>导言),所以今天怀着激动的心情开始了这个专题的学

hdu1937 Finding Seats

hdu1937 Finding Seats 题意是 求最小的矩形覆盖面积内包含 k 个 空位置 枚举上下边界然后 双端队列 求 最小面积 #include <iostream> #include <cstring> #include <cstdio> #include <cmath> #include <algorithm> #include <vector> #include <map> #include <que

hdu3982 直线切多边形

题意:有一块蛋糕,上面有一颗cherry.用刀子切n次,求切完之后有cherry的那部分的面积 My solution: 先做一个大矩形,使cake内切于这个大矩形.如图: 然后不断切这个大矩形,每次切割的时候保留与cherry同侧的那部分.最后剩下的就是一个多边形.求该多边形与圆的面积交即可. 在切割的时候如何保证留下来的是与cherry同侧的部分呢?很简单 方法不难,但是一直WA= =.遇到了个奇怪的问题: 对于这组数据: 3 5 2-5 0 5 3-5 0 5 -30 05 2-5 0 5

POJ 3384

题目大意: 给定一个多边形,给定一个圆的半径,要求在多边形中放置两个同样半径的圆,可相互覆盖,但不能超出多边形的范围,希望两个圆的面积覆盖和最大 输出任意一组满足的圆的圆心点 如果两个圆不相互覆盖,那么必然达到最大面积 如果相互覆盖,可以换一种方式考虑,因为两个圆是一样的,两个圆的距离越长,那么相互覆盖的面积必然越小 所以可以将多边形内推进半径的长度 然后在半平面交后得到的多边形中找到距离最远的两个点 仔细想一想可以知道多边形上最远距离的点,必然是两个顶点的距离 所以平方的方法就可以求解了 当然

无人机水文监测方案

1 无人机及无人机遥感技术 无人驾驶飞机简称无人机(Unmanned Aerial Vehicle,缩写UAV),是一种有动力.可控制.能携带多种任务设备.执行多种任务,并能重复使用的无人驾驶航空器.无人机出现在1917年,早期的无人驾驶飞行器的研制和应用主要用作靶机,应用范围主要是在军事上,后来逐渐用于作战.侦察及民用遥感飞行平台.20世纪80年代以来,随着计算机技术.通讯技术的迅速发展以及各种数字化.重量轻.体积小.探测精度高的新型传感器的不断面世,无人机的性能不断提高,应用范围和应用领域迅

物联网标准NB-IoT和LoRa,究竟谁能更胜一筹?

物联网的快速发展对无线通信技术提出了更高的要求,专为低带宽.低功耗.远距离.大量连接的物联网应用而设计的LPWA(low-power Wide-Area Network,低功耗广域网)也快速兴起. 为了抢夺LPWA商机,相关厂商纷纷组建联盟推出不同协议,NB-IoT与LoRa就是典型代表.华为与沃达丰共同提出的NB-IoT是工作于授权频谱下3GPP支持的2/3/4G蜂窝通信技术.由SemTech研发的LoRa是基于Sub-GHz工作于未授权频谱的通信技术.同属于LPWA,为什么沃达丰创新和架构主