依然是懸線法,不過要注意這裡棋盤向外擴張的時候需要滿足條件
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,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好...