ZJOI2007 棋盤製作

2022-09-09 05:24:12 字數 1202 閱讀 7389

\(【題目描述】\)

有乙個\(n\cdot m(n,m \leq 10^3)\)的\(01\)棋盤,問棋盤上最大的01交錯(即相鄰兩個數不相同)的正方形和矩形的大小分別是多少。

\(【輸入樣例】\)

3 3

1 0 1

0 1 0

1 0 0

\(【輸出樣例】\)

4

6

\(【考點】\)

動態規劃、懸線法

\(【做法】\)

懸線法模板。定義\(left[i][j]\)表示\((i,j)\)到最左能到達的點的縱座標,\(right[i][j]\)表示\((i,j)\)到最右能到達的點的縱座標,\(up[i][j]\)表示\((i,j)\)到最上能到達的點與\((i,j)\)之間的距離。

因為矩陣要求數字互不相同,因此在\(a[i][j]!=a[i-1][j]\)或\(a[i][j]!=a[i][j-1]\)或\(a[i][j]!=a[i][j+1]\)時轉移即可。

處理正方形,只需要在答案\(ans=\max(ans,(right[i][j]-left[i][j]+1)\cdot up[i][j])\)轉移的時候,獲取當前最大矩陣的兩條邊中較小的那一條邊,即為當前最大正方形的變成,使用其平方轉移即可。

\(【**】\)

#include#includeusing namespace std;

const int n=2e3+50;

int a[n][n];

int lft[n][n],rgt[n][n],up[n][n];

int n,m,ans1,ans2;

inline int min(int a,int b)

int main()

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

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

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

int mine=min(up[i][j],rgt[i][j]-lft[i][j]+1);

ans1=max(ans1,mine*mine);

ans2=max(ans2,(rgt[i][j]-lft[i][j]+1)*up[i][j]);}}

printf("%d\n%d\n",ans1,ans2);

return 0;

}

ZJOI2007 棋盤製作

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

ZJOI2007 棋盤製作

十二年前的zjoi我現在還切不過我是不是可以退役了 傳送門 西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個8 times 88 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作...

棋盤製作 ZJOI2007

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