bzoj1057 ZJOI2007 棋盤製作

2022-05-02 03:39:06 字數 1386 閱讀 4053

西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋、象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個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

正解:$dp$+單調棧。

首先做乙個轉化,把$i+j$同為奇數的點取反,那麼我們的目標就變成了找到最大的全$0$或全$1$正方形和矩形,這裡只考慮全$1$的情況。

正方形很容易,設$f[i][j]$表示以$(i,j)$為右下角的最大正方形邊長,那麼$f[i][j]=min(f[i-1][j-1]+1,mh[i][j],ml[i][j])$。

其中$mh[i][j]$表示$(i,j)$向左延伸的最長長度,$ml[i][j]$表示$(i,j)$向上延伸的最長長度。

矩形其實也不難,我們可以使用單調棧來求最大全$1$矩形,由於是經典問題所以不再贅述。

1 #include 2

#define il inline

3#define rg register

4#define ll long long

5#define n (2005)67

using

namespace

std;89

intmh[n][n],ml[n][n],f[n][n],g[n][n],st[n],n,m,ans1,ans2;

1011 il int

gi()

1819 il void

pre()

25return;26

}2728 il void

work1()

34return;35

}3637 il void

work2()45}

46return;47

}4849int

main()

BZOJ1057 ZJOI2007 棋盤製作

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

bzoj1057 ZJOI2007 棋盤製作

傳送門 我們可以先用o nm 時間求出向左向右擴充套件的最大距離 然後o nm 列舉下端點位置 在矩形下面的邊上 計算出當高最高時的寬度,相乘後取max 正方形同理,只要取高度和寬度的min就行了。uses math var hei,a,x,y,le,ri array 0.2005,0.2005 o...

BZOJ1057 ZJOI2007 棋盤製作

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