題解 P1169 ZJOI2007 棋盤製作

2021-09-26 23:28:29 字數 903 閱讀 9664

依然是懸線法,不過要注意這裡棋盤向外擴張的時候需要滿足條件

g [i

][j]

⊕g[i

−1][

j]!=

0g[i][j] \oplus g[i-1][j] != 0

g[i][j

]⊕g[

i−1]

[j]!

=0最大正方形可以由過程中求出的每乙個極大棋盤得到。

#include

#include

using

namespace std;

const

int maxn =

1017

;int n, m;

int g[maxn]

[maxn]

;int up[maxn]

[maxn]

;int l[maxn]

[maxn]

;int r[maxn]

[maxn]

;int

main()

//printf("## (%d, %d) %d %d %d\n", i, j, l[i][j], r[i][j], up[i][j]);

maxs =

max(maxs,

(up[i]

[j]+1)

*(l[i]

[j]+ r[i]

[j]+1)

);k =

max(k,

min(up[i]

[j]+

1, l[i]

[j]+ r[i]

[j]+1)

);}}

cout << k * k << endl;

cout << maxs << endl;

}

P1169 ZJOI2007 棋盤製作

隨手一寫就衝進了最優解的第一頁?本來以為是dp,但是經過仔細分析.這不就是二進位制 單調棧麼?然後想正方形的情況.emm.好像正方形一定是最大矩形的子矩陣吧 聽說此題dp也可行?include include include include include using namespace std t...

P1169 ZJOI2007 棋盤製作 貪心

乙個矩陣中求乙個最大的子矩陣和子正方形使得它們其中都是01交錯。l ef ti,j left lefti,j 表示 i,j i,j i,j 往左擴充套件多遠,rig hti,jright righti j 表示 i,j i,j i,j 往右擴充套件多遠,upi j up up i,j 表示 i,j ...

洛谷 P1169 ZJOI2007 棋盤製作

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