HDU 1505 City Game (最大子矩形面积)

来源:互联网 发布:ibm云计算 编辑:程序博客网 时间:2024/04/30 09:18

题目链接: 轻点我一下 >3<


本题和 HDU1506 很像 不过本题要对前i行求最大子矩形面积 进而可得最大子矩形面积 - - 需要注意的是关于高度的读入 要仔细想一想

不要忘记每次清零h高度数组

AC代码如下:

////  HDU 1505 City Game////  Created by TaoSama on 2015-02-07//  Copyright (c) 2014 TaoSama. All rights reserved.//#include <algorithm>#include <cctype>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iomanip>#include <iostream>#include <map>#include <queue>#include <string>#include <set>#include <vector>#define CLR(x,y) memset(x, y, sizeof(x))using namespace std;const int INF = 0x3f3f3f3f;const int MOD = 1e9 + 7;const int N = 1e5 + 10;int l[1005], r[1005], h[1005];char a[5];int main() {#ifdef LOCALfreopen("in.txt", "r", stdin);//freopen("out.txt","w",stdout);#endifios_base::sync_with_stdio(0);int k; cin >> k;while(k--) {int n, m; cin >> n >> m;int ans = -INF;CLR(h, 0); h[0] = h[m + 1] = -1;for(int i = 1; i <= n; ++i) {for(int j = 1; j <= m; ++j) {cin >> a;if(a[0] == 'F') ++h[j];else            h[j] = 0;}for(int j =  1; j <= m; ++j)l[j] = r[j] = j;for(int j = 1; j <= m; ++j)while(h[l[j] - 1] >= h[j])l[j] = l[l[j] - 1];for(int j = m; j >= 1; --j)while(h[r[j] + 1] >= h[j])r[j] = r[r[j] + 1];for(int j = 1; j <= m; ++j)ans = max(ans, (r[j] - l[j] + 1) * h[j]);}cout << ans * 3 << endl;}return 0;}


0 0
原创粉丝点击