UVa 12265 (单调栈) Selling Land 紫书上分析了很多很多,超详细,=~ω~= 每扫描一行可以计算一个height数组,表示从这块空地向上延伸多少块空地,而且这个数组可以逐行递推。 首先对于每一行来说维护一个单调栈,栈里放的是矩形的左上角,而且横坐标c和高度h也都是递增的,另外对于扫描到的同一个右下角,矩形面积...
using namespace std; typedef pair<int,int> P; #define maxn 1010 int ans[maxn * 2], h[maxn][maxn], n, m; void init() { char str[maxn]; memset(h,0,sizeof(h)); memset(ans,0,sizeof(ans)); for(int i = 1; i <= n; i++) { scanf("%s",str + 1); for(int j =...
换一种思路,我们从一行的角度看它,举个例子: 从点(i,j)一直往左走,底下那条边(称为宽)越长,能往上延伸出的长度(称为高)越矮。更形式化地说,令gi,j为点(i,j)往上有多少块空地,那我们可以枚举一个宽len,对应的高就是mini−len<j≤i{gi,j},那么点(i,r)的答案就是:(变量含义有变化) ansi,r...
一、题意 输入一个n*m的矩阵,'.'表示空地,'#'表示障碍物,要求你对于每一个空地,求出以它为右下角的空矩形的最大周长。然后统计每个周长出现了多少次。 二、解析 看到题意,应该就能回想到一些之前做过的题目:找最大空矩形面积。 而这道题要找的是最大周长。其实是异曲同工的,也就是先将原图转化为n个...
uva12265贩卖土地 扫描、保留价值、单调栈。 最容易想到的是逐一扫描,然后看能不能通过当前点的相邻三个点得到该点答案,可惜无解。那么,就考虑对于某点来说,究竟需要那些信息才能给出答案。 容易想到,若给出当前行上每个列上方最邻近的沼泽地的位置,就足以给出答案,这一信息记为height[],易知更新height[]代价不...
紫书 例题8-19 UVa 12265 (扫描法+单调栈) 首先可以用扫描法处理出一个height数组, 来保存从当前行开始, 每一个格子可以向上延伸的最大长度。 这种“延伸”的问题用扫描法, 因为往往这个时候可以利用前一次的结果来更新当前的值 然后这道题的关键就是是维护一个单调栈, 栈顶的元素就是当前状态所求的答案。
UVA12265-Selling Land(细节处理) Problem UVA12265-Selling Land Accept: 309 Submit: 3231 Time Limit: 3000 mSec Problem Description Input There may be multiple test cases in the input. Each test case will begin with an even integer n (2 ≤ n ≤ 1,000) on its own line. On the next n ...
UVA - 12265Selling Land(暴力) B - Selling Land UVA - 12265 As you may know, the country of Absurdistanis full of abnormalities. For example, the whole country can be divided intounit squares that are either grass or swamp. Also, the country is famous forits incapable bureaucrats. If you...
UVA12265-Selling Land(单调栈) Problem UVA12265-Selling Land Accept: 137 Submit: 782 Time Limit: 3000 mSec Problem Description Input On the first line a positive integer: the number of test cases, at most 100. After that per test case:...
uva12265 贩卖土地 单调栈 输入一个n*m的矩阵,每个格子可能是空地,也可能是沼泽。对于每个空地格子,求出以它为右下角的空矩形的最大周长,然后统计每个周长出现了多少次。 输入包含多组测试数据,第一行输入一个正整数N,表示输入样例组数(N<=10) 每组测试样例第一行为正整数n和m(1<=n,m<=1000)...