1057 ZJOI2007 棋盤製作

2022-05-16 05:50:06 字數 1758 閱讀 3232

time limit: 20 sec  memory limit: 162 mb

submit: 3601  solved: 1855

[submit][status][discuss]

西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋、象棋以及日本的將棋同享盛名。據說西洋棋起源

於易經的思想,棋盤是乙個8*8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,

正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好朋友小w決定

將棋盤擴大以適應他們的新規則。小q找到了一張由n*m個正方形的格仔組成的矩形紙片,每個格仔被塗有黑白兩種

顏色之一。小q想在這種紙中裁減一部分作為新棋盤,當然,他希望這個棋盤盡可能的大。不過小q還沒有決定是找

乙個正方形的棋盤還是乙個矩形的棋盤(當然,不管哪種,棋盤必須都黑白相間,即相鄰的格仔不同色),所以他

希望可以找到最大的正方形棋盤面積和最大的矩形棋盤面積,從而決定哪個更好一些。於是小q找到了即將參加全

國資訊學競賽的你,你能幫助他麼?

第一行包含兩個整數n和m,分別表示矩形紙片的長和寬。接下來的n行包含乙個n * m的01矩陣,表示這張矩形

紙片的顏色(0表示白色,1表示黑色)。

包含兩行,每行包含乙個整數。第一行為可以找到的最大正方形棋盤的面積,第二行為可以找到的最大矩形棋

盤的面積(注意正方形和矩形是可以相交或者包含的)。

3 31 0 1

0 1 0

1 0 046

n, m ≤ 2000

單調棧:

首先乙個巧妙的處理,將0/1相間轉化為同色,於是變成了最大子矩陣問題

設f[i][j]表示第i行第j列的點,向右最多延申多少個位置

我們可以發現最大子矩陣的寬一定是某乙個f[i][j]

接下來列舉每一列,用單調棧處理,儲存棧頂的f[i][j]和高度(行號),如果某乙個點的f[i][j]值小於等於棧頂的f值,於是我們更新答案,後面的矩陣都不會以棧頂的f值為寬,但可能會以棧頂的高度為高,因此高度我們需要另外儲存。

1 #include2 #include3 #include4 #include5

using

namespace

std;67

#define sqr(x) ((x)*(x))89

intn,m,ans1,ans2;

10int a[2005][2005],f[2005][2005

];11

int row[2005],col[2005

],top,high;

1213

void

work()

1431 row[++top]=f[i][j];col[top]=high;32}

33}34}

3536

intmain()

3745

work();

46for(int i=1;i<=n;i++)

47for(int j=1;j<=m;j++)

48 a[i][j]=!a[i][j];

49work();

50 printf("

%d\n

",ans1);

51 printf("

%d\n

",ans2);

52return0;

53 }

懸線法:

待填坑

1057 ZJOI2007 棋盤製作

題目鏈結 題目大意 求最大的黑白相間子矩陣 子正方形大小 題解 進行乙個非常巧妙的條件轉換 將i j為奇數的格仔顏色反轉,這樣就變成求黑色最大子矩陣和白色最大子矩陣取max了,最大子正方形顯然是最大子矩陣的一部分 當然不轉化也是隨便做的 逃 時間複雜度o mn 我的收穫 懸線法勁 include i...

1057 ZJOI2007 棋盤製作

西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源 於易經的思想,棋盤是乙個8 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好朋友小w決定 將...

BZOJ1057 ZJOI2007 棋盤製作

西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源 於易經的思想,棋盤是乙個8 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好朋友小w決定 將...