这片土地被分成 N×M 个格子,每个格子里写着 R 或者 F,R 代表这块土地被赐予了 rainbow,F 代表这块土地被赐予了 freda。
现在 freda 要在这里卖萌。。。它要找一块矩形土地,要求这片土地都标着 F 并且面积最大。
但是 rainbow 和 freda 的 OI 水平都弱爆了,找不出这块土地,而蓝兔也想看 freda 卖萌(她显然是不会编程的……),所以它们决定,如果你找到的土地面积为 S,它们每人给你 S 两银子。
输入格式
第一行两个整数 N,M,表示矩形土地有 NN 行 M 列。
接下来 N 行,每行 M 个用空格隔开的字符 F 或 R,描述了矩形土地。
输出格式
输出一个整数,表示你能得到多少银子,即「3×最大 F 矩形土地面积」的值。
输入输出样例
输入 #1
1 2 3 4 5 6
56 R FFFFF FFFFFF R R R FFF FFFFFF FFFFFF
输出 #1
1
45
说明/提示
对于 50% 的数据,1≤N,M≤200 。
对于 100% 的数据,1≤N,M≤1000 。
2. 题解
分析
典型求最大子矩阵和问题,即求一个 M×N 矩阵中的子矩阵元素和的最大值。这可以用单调栈解决。对于每一行的每一列元素,往上计算连续的 F 的个数,即得到以每一行为基准的一个条形统计图,每个列对应一个条形矩形,矩形的宽为 1 ,高即为该元素往上计算连续的 F 的个数,这就是典型的计算矩形统计图的最大内矩形面积的问题,用 O(N) 的单调栈完美解决。由于有 N 行,每一行都构造出一个矩形统计图,故总复杂度为 O(N2) 。