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