P1169 ZJOI2007 棋盤製作 懸線法

2022-03-16 14:57:10 字數 875 閱讀 7269

---恢復內容開始---

給你乙個矩陣,選出最大的棋盤,棋盤的要求是黑白相間(01不能相鄰),求出最大的正方形和矩形棋盤的面積;

資料n,m<=2000;

這個一看就可能是n2dp,但是寫不出。單走一波暴力(sb);

懸線法:就是將限制條件看成一根線,能擴充套件的最大長度,線要直;

矩形就是這樣;

用l[i][j]表示i,j合法的情況下左邊能延伸的座標,r[i][j]是在右邊能延伸的座標

up[i][j]是能向上延長的長度;

預處理過後,以i,j作為下底邊,用左右上能延伸的長度更新ans;

#include#include

#include

using

namespace

std;

const

int maxn=5010

;int

n,m;

inta[maxn][maxn];

intl[maxn][maxn],r[maxn][maxn];

intup[maxn][maxn],down[maxn][maxn];

intans1,ans2;

intmain()

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

for(int j=m-1;j>=1;j--)

}for(int i=2;i<=n;i++)}}

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

}printf(

"%d\n%d

",ans1,ans2);

return0;

}

---恢復內容結束---

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 棋盤製作

依然是懸線法,不過要注意這裡棋盤向外擴張的時候需要滿足條件 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...