P1169 ZJOI2007 棋盤製作 貪心

2021-09-22 22:50:07 字數 1539 閱讀 7957

乙個矩陣中求乙個最大的子矩陣和子正方形使得它們其中都是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,j​an

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,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好...