乙個矩陣中求乙個最大的子矩陣和子正方形使得它們其中都是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)
(i,j)
(i,j
)向上擴充套件多少個。
然後對於每個點作為最下邊的點時答案為
l en
i,j=
upi,
j+ma
x(j−
k
i,j)
len_=up_+max\,right_\}(j-kle
ni,j
=up
i,j
+max
(j−k
i,j)an
s1=u
pi,j
∗len
i,
jans1=up_*len_
ans1=u
pi,j
∗le
ni,jan
s2=m
in
2ans2=min\,len_\}^2
ans2=m
in2
// luogu-judger-enable-o2
#include
#include
using
namespace std;
const
int n=
2100
;int n,m,a[n]
[n],right[n]
[n],left[n]
[n],up[n]
[n],ans1,ans2;
intmain()
for(
int i=
1;i<=n;i++
)for
(int j=
1;j<=m;j++
)for
(int i=
1;i<=n;i++
)for
(int j=
1;j<=m;j++
)int l=right[i]
[j]-left[i]
[j]+1;
int w=
min(up[i]
[j],l)
; ans1=
max(l*up[i]
[j],ans1)
; ans2=
max(w*w,ans2);}
printf
("%d\n%d"
,ans2,ans1)
;}
P1169 ZJOI2007 棋盤製作
隨手一寫就衝進了最優解的第一頁?本來以為是dp,但是經過仔細分析.這不就是二進位制 單調棧麼?然後想正方形的情況.emm.好像正方形一定是最大矩形的子矩陣吧 聽說此題dp也可行?include include include include include using namespace std t...
題解 P1169 ZJOI2007 棋盤製作
依然是懸線法,不過要注意這裡棋盤向外擴張的時候需要滿足條件 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 in...
洛谷 P1169 ZJOI2007 棋盤製作
西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個8 times 88 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好...