dp Luogu P1169 棋盤製作

2022-09-18 01:06:08 字數 1259 閱讀 5859

西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋、象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個8*8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。

而我們的主人公小q,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好朋友小w決定將棋盤擴大以適應他們的新規則。

小q找到了一張由n*m個正方形的格仔組成的矩形紙片,每個格仔被塗有黑白兩種顏色之一。小q想在這種紙中裁減一部分作為新棋盤,當然,他希望這個棋盤盡可能的大。

不過小q還沒有決定是找乙個正方形的棋盤還是乙個矩形的棋盤(當然,不管哪種,棋盤必須都黑白相間,即相鄰的格仔不同色),所以他希望可以找到最大的正方形棋盤面積和最大的矩形棋盤面積,從而決定哪個更好一些。

於是小q找到了即將參加全國資訊學競賽的你,你能幫助他麼?

輸入格式:

包含兩個整數n和m,分別表示矩形紙片的長和寬。接下來的n行包含乙個n * m的01矩陣,表示這張矩形紙片的顏色(0表示白色,1表示黑色)。

輸出格式:

包含兩行,每行包含乙個整數。第一行為可以找到的最大正方形棋盤的面積,第二行為可以找到的最大矩形棋盤的面積(注意正方形和矩形是可以相交或者包含的)。

輸入樣例#1: 

3 3

1 0 1

0 1 0

1 0 0

輸出樣例#1: 

4

6

對於20%的資料,n, m ≤ 80

對於40%的資料,n, m ≤ 400

對於100%的資料,n, m ≤ 2000

1 #include2 #include3

using

namespace

std;

4int n,m,ans1,ans2,map[2010][2010],l[2010][2010],r[2010][2010],f[2010][2010];5

intmain()620

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

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

22if (map[i][j]!=map[i-1

][j])

2328

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

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

3035 printf("

%d\n%d

",ans1,ans2);

36return0;

37 }

P1169 棋盤製作

這裡是題幹 這是什麼優化都沒有的。六次方,爽的一批 include using namespace std int n,m,a 2100 2100 f 100 100 100 100 bool judge int i,int j,int x,int y if k i 2 0 l j 2 1 k i ...

洛谷P1169 棋盤製作

懸線法 好像 是可以解決給定矩陣中滿足條件的最大子矩陣的樣子 先就提論題 設 f i j 為從 i,j 點擴充套件最多能達到的最左端的點 color 設l i j 為從 i,j 點擴充套件能達到的最右端的點 color 設up i j 為從 i,j 點能擴充套件到的上界 然後就是 color 從左往...

P1169 ZJOI2007 棋盤製作

隨手一寫就衝進了最優解的第一頁?本來以為是dp,但是經過仔細分析.這不就是二進位制 單調棧麼?然後想正方形的情況.emm.好像正方形一定是最大矩形的子矩陣吧 聽說此題dp也可行?include include include include include using namespace std t...