题目描述
有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地。 这片土地被分成N*M个格子,每个格子里写着’R’或者’F’,R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda。 现在freda要在这里卖萌。。。它要找一块矩形土地,要求这片土地都标着’F’并且面积最大。 但是rainbow和freda的OI水平都弱爆了,找不出这块土地,而蓝兔也想看freda卖萌(她显然是不会编程的……),所以它们决定,如果你找到的土地面积为S,它们每人给你S两银子。
输入格式
第一行两个整数N,M,表示矩形土地有N行M列。 接下来N行,每行M个用空格隔开的字符’F’或’R’,描述了矩形土地。
输出格式
输出一个整数,表示你能得到多少银子,即(3*最大’F’矩形土地面积)的值。
样例
样例输入
5 6
R F F F F F
F F F F F F
R R R F F F
F F F F F F
F F F F F F
样例输出
45
写在前面
本题解思路受启发于浅谈用极大化思想解决最大子矩形问题中的“悬线”算法(算法2);
题解
本题实质是要我们找出一个矩阵中由“F”组成的最大子矩阵面积;
根据浅谈用极大化思想解决最大子矩形问题中的“悬线”思路,我们可以用DP来解决此问题;
定义f[i][j]表示以点(i, j)为右下角所能构成的最大矩阵,如果直接维护面积的话,那和暴力没啥区别,所以不能直接维护面积;
考虑面积的来源,一个矩阵的面积 == 长 * 高,所以只需维护长和高,最后乘起来即可;
对于长,我们可以分别维护此矩阵的左右端点,这样更方便;
怎样维护呢?考虑点(i, j);
首先,此点不能是‘R’;
然后,考虑状态转移,发现点(i, j)的左端点只和点(i - 1, j)的左端点和点(i, j)在第i行前面最后一个是‘R’的点有关;
依据短板效应,我们需要在这两个数中找最小