\(【題目描述】\)
有乙個\(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,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好朋友小...