[TIOJ] 1063 最大矩形

problem link:http://tioj.infor.org/problems/1063
  這題好像是經典題,可是我總是無法好好掌握QQ,今天重寫也是想了好久~~
  作法是先選定一行,維護每個元素的最高高度,再往左計算面積,嗚嗚...我講的好抽象,不過因為要往左計算面積,所以複雜度是O(NM^2),所以可以將N、M交換來加速......嗎?有空再問學長好了,不過唯一確定的事是交換的話會有點麻煩QQ (剛剛高興地想要試一下就...)
  感覺tag好像有點不夠......也再說啦XD

#include<bits/stdc++.h>
using namespace std;
int rec[209][209];
int r[209];
int main()
{
    int n,m;
    cin >> n >> m;
    int ans = 0;
    for(int i = 1; i <= n; i++)
    {   
        for(int j = 1; j <= m; j++)
        {
            cin >> rec[i][j];
            r[j] = (rec[i][j])?r[j]+1:0;
            for(int t = j, rr = r[j]; t >= 1 && rec[i][t]; t-- ,rr = min(r[t],rr))
                ans = max(ans,rr*(j-t+1));
        }
    }
    cout << ans << '\n';    
}

留言

這個網誌中的熱門文章

Shellshock.io從入門到上手(針對單狙)(沒有圖片、影片版本)

[TIOJ] 1007燈泡問題