BZOJ 1057 棋盤製作

2022-05-13 10:51:06 字數 1127 閱讀 9961

bzoj 1057 傳送門

一道求最大子矩陣的裸題

一般求最大子矩陣的方法為單調棧(bzoj 3039 玉蟾宮

)/ 垂線法

兩者的思想其實完全相同,不過以前沒寫過垂線法,這次來練一練

垂線法要記錄3個狀態:

$h[i][j]$記錄當前點能向上合法走的步數

$l[i][j]$記錄高為$h[i][j]$的線最多能左移到**,同理$r[i][j]$表示能右移到何處

我們先算出僅在每一行中$r、l$的值,如果向上合法則用:

$l[i][j]=max(l[i][j],l[i-1][j])$和$r[i][j]=min(r[i][j],r[i-1][j])$來遞推即可

最終用$(r[i][j]-l[i][j]+1)*h[i][j]$來更新答案

#include using

namespace

std;

const

int maxn=2005

;int res1=0,res2=0

;int

n,m,dat[maxn][maxn],l[maxn][maxn],r[maxn][maxn],h[maxn][maxn];

intmain()

for(int i=1;i<=n;i++)

for(int i=1;i<=n;i++)

for(int j=1;j<=m;j++)

printf(

"%d\n%d

",res2,res1);

return0;

}

1、關於黑白染色

由於此題要求是0/1相間才為合法,可以使用乙個很妙的$trick$:

將$i+j$為奇數/偶數的位置0/1調換,即可轉化為原基本模型(0/1相同才合法)

有關兩種狀態染色的題目考慮一下$i+j$奇偶性相同的位置!

(進行交換/翻轉等操作,或利用其推導性質)

2、結論:最大正方形一定在最大矩形中

有關正方形的題目可以轉化為求解矩形

3、垂線法中$l,r$都一定要初始化為$j$

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決定 將...