【單調(diào)棧】POJ_3494_Largest Submatrix of All 1’s

Largest Submatrix of All 1’s

Time Limit: 5000MS Memory Limit: 131072K
Total Submissions: 5903 Accepted: 2226
Case Time Limit: 2000MS

Description
Given a m-by-n (0,1)-matrix, of all its submatrices of all 1’s which is the largest? By largest we mean that the submatrix has the most elements.

Input
The input contains multiple test cases. Each test case begins with m and n (1 ≤ m, n ≤ 2000) on line. Then come the elements of a (0,1)-matrix in row-major order on m lines each with n numbers. The input ends once EOF is met.

Output
For each test case, output one line containing the number of elements of the largest submatrix of all 1’s. If the given matrix is of all 0’s, output 0.

Sample Input
2 2
0 0
0 0
4 4
0 0 0 0
0 1 1 0
0 1 1 0
0 0 0 0

Sample Output
0
4

Source
POJ Founder Monthly Contest – 2008.01.31, xfxyjwf

題意:
給一個(gè)m*n的01矩陣,找出其中最大的全1矩陣,輸出其1的個(gè)數(shù)。

思路:
單調(diào)棧。同POJ2559,對(duì)每一行的每一個(gè)元素做預(yù)處理,將其轉(zhuǎn)換成m個(gè)POJ2559問(wèn)題,遍歷所有行即可找出最大,時(shí)間復(fù)雜度約O(mn)。

#include<cstdio>
#include<cstring>
using namespace std;

const int maxn = 2000;

struct Node {
    int height;
    int index;
}st[maxn + 5];
int top;

int buf[maxn + 5];
int m, n, ans;

int main() {
    int value, tmp;
    while (scanf("%d%d", &m, &n) != EOF) {
        memset(buf, 0, sizeof(buf));
        ans = 0;
        for (int i = 1; i <= m; ++i) {
            for (int j = 1; j <= n; ++j) {
                scanf("%d", &value);
                if (value == 0)
                    buf[j] = 0;
                else
                    buf[j] += 1;
            }
            buf[n + 1] = -1; // 最后包含一個(gè)-1的項(xiàng),用于彈出棧中所有元素
            st[0].height = -1; // 起始項(xiàng)
            st[0].index = 0;
            top = 1;
            for (int k = 1; k <= n + 1; ++k) {
                // 進(jìn)棧
                if (buf[k] >= st[top - 1].height) {
                    st[top].height = buf[k];
                    st[top].index = k;
                    ++top;
                }
                // 循環(huán)出棧,維護(hù)棧單調(diào)
                else {
                    while (buf[k] < st[top - 1].height) {
                        tmp = st[top - 1].height * (k - st[top - 1].index);
                        if (ans < tmp)
                            ans = tmp;
                        --top;
                    }
                    st[top++].height = buf[k];
                }
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,582評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,540評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,028評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,801評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,223評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,442評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,976評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,800評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,996評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評(píng)論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,233評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,662評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,926評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,702評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,991評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容

  • 首先我們來(lái)看看MVC架構(gòu)的示意圖: 和訪問(wèn)者交互的是控制層(Controller層),控制器(controller...
    司馬東陽(yáng)閱讀 350評(píng)論 0 0
  • 你覺(jué)得這個(gè)世界上最難追上的人是誰(shuí)? 初中的時(shí)候,我覺(jué)得,世界上最難追上的人是劉翔博爾特,高中時(shí)身邊的小伙伴們開(kāi)始情...
    晏耀飛閱讀 363評(píng)論 0 3
  • 本周某日上午某人因某稿被某領(lǐng)導(dǎo)大罵一番,當(dāng)著某某某同事的面兒,還是,當(dāng)然,以上是客觀情況,主觀上某人著實(shí)能為自己辯...
    競(jìng)走的蝸牛閱讀 353評(píng)論 0 2
  • 此刻只能用一個(gè)貓頭來(lái)形容心情
    成金閱讀 195評(píng)論 0 2
  • 高樓大廈排排座, 四處無(wú)風(fēng)夜難眠; 風(fēng)扇一晚不停息, 大汗如雨淚漣漣。 注1:長(zhǎng)沙不愧有火爐之稱(chēng),連續(xù)高溫,又高樓...
    亮靚_27d5閱讀 1,087評(píng)論 32 48