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