洛谷1169 棋盤製作(懸線法)

2022-06-02 06:30:15 字數 1004 閱讀 5126

懸線法:

用於解決給定矩陣滿足條件的最大子矩陣。

做法:用一條線(橫豎都行)左右移動直到不滿足約束條件或者到達邊界。

定義:\(left(i,j)\):表示\((i,j)\)向左擴充套件能夠到達的最左邊的位置。

\(right(i,j)\):表示\((i,j)\)向右擴充套件能夠到達的最右邊的位置。

\(up(i,j)\):表示\((i,j)\)向上能夠拓展的最長長度。

遞推公式:

\(left(i,j)=max\\).

\(right(i,j)=min(right(i,j),right(i-1,j))\).

因為有\(up\)陣列,\(up\)陣列表示向上拓展的最長長度,所以要考慮上一層的情況。

#includeusing namespace std;

const int maxn = 2e3 + 10;

int a[maxn][maxn], n, m;

int lef[maxn][maxn];

int rig[maxn][maxn];

int up[maxn][maxn];

int main()

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

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

int ans1, ans2;

ans1 = ans2 = 0;

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

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

int a = rig[i][j] - lef[i][j] + 1;

int b = up[i][j];

ans1 = max(ans1, min(a,b)*min(a,b));//õý·½ðî

ans2 = max(ans2, a*b);

} cout << ans1 << endl << ans2 << endl;

return 0;

}

洛谷 P1169 棋盤製作(懸線法DP)

題目大意 有乙個0,1矩陣。求其中的0,1交錯的最大子正方形矩陣和長方形矩陣的面積。解題思路 求這種最大子矩陣的題目很可能是懸線法。這個矩陣某個格仔 i,j 向左可能延伸到多遠,向右可能延伸到多遠,向上可能延伸到多遠,然後在確定縱向可以向下延伸時候利用轉移公式 up i j up i 1 j 1 l...

懸線法 棋盤製作

description 西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個8 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟...

P1169 ZJOI2007 棋盤製作(懸線法)

題目描述 西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個8 times 88 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是...