洛谷P1681 最大正方形II

2022-05-02 16:00:09 字數 1844 閱讀 9906

忙完了學校的事,v神終於可以做他的「正事」:陪女朋友散步。一天,他和女朋友走著走著,不知不覺就來到 了乙個千里無菸的地方。v神正要往回走,如發現了一塊牌子,牌子上有有一行小字和一張圖,小字說道:「找到圖上最大的交錯正方形之後和我聯絡,這塊地就是 你的了。」在房價瘋長的年代,v神當然不願錯過這個機會,於是開始找了起來……以v神的能力當然找不出來了,你能幫v神找出來嗎?

圖上有乙個矩陣,由n*m個格仔組成,這些格仔由兩種顏色構成,黑色和白色。請找到面積最大的且內部是黑白交錯(即兩個相連的正方形顏色不能相同)的正方形。

輸入格式:

第一行兩個整數n和m,分別表示行數和列數。接下來有n行,每行m個數,0或1分別表示這個格仔是黑色或白色。

輸出格式:

僅有一行,表示滿足條件最大正方形的 邊長

輸入樣例#1:

3 3

0 1 0

1 0 0

1 1 1

輸出樣例#1:

2
樣例解釋:

(1,1)到(2,2)這個正方形是滿足條件的,它的邊長是2

資料範圍約定:

對於30%的資料,n <= 20

對於60%的資料,n <=300

對於100%的資料,n <= 1500

【狀態】

dp[i][j]表示以(i,j)為右下角的正方形的最大邊長

【轉移】

若(i,j)與周圍四個格仔交錯,則dp[i][j] = min + 1;

否則dp[i][j] = 1

【初始狀態】

dp[1][j] = dp[i][1] = 1

【答案】

ans = max

code

1 #include 2

3 inline void read(int &x)

410 inline int min(int a, int b)

11 inline int max(int a, int b)

1213

const

int inf = 0x3f3f3f3f;14

const

int maxn = 1500 + 10;15

const

int maxm = 1500 + 10;16

17int

n,m,num[maxn][maxm],dp[maxn][maxm],ans;

1819

intmain()

2030

}31 ans = 1;32

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

33for(int j = 2;j <= n;++j)

34if((num[i - 1][j - 1] == num[i][j] && num[i - 1][j] == num[i][j - 1]) && num[i - 1][j] != num[i - 1][j - 1

])35 dp[i][j] = min(dp[i - 1][j - 1], min(dp[i - 1][j], dp[i][j - 1])) + 1,ans =max(ans, dp[i][j]);

36else

37 dp[i][j] = 1

; 38 printf("%d"

, ans);

39return0;

40 }

view code

洛谷 P1681 最大正方形II 線性dp

忙完了學校的事,v神終於可以做他的 正事 陪女朋友散步。一天,他和女朋友走著走著,不知不覺就來到了乙個千里無菸的地方。v神正要往回走,如發現了一塊牌子,牌子上有有一行小字和一張圖,小字說道 找到圖上最大的交錯正方形之後和我聯絡,這塊地就是你的了。在房價瘋長的年代,v神當然不願錯過這個機會,於是開始找...

P1681 最大正方形 Iand II

在乙個n m的只包含0和1的矩陣裡找出乙個不包含0的最大正方形,輸出邊長。輸入格式 輸入檔案第一行為兩個整數n,m 1 n,m 100 接下來n行,每行m個數字,用空格隔開,0或1.輸出格式 乙個整數,最大正方形的邊長 輸入樣例 1 複製4 4 0 1 1 1 1 1 1 0 0 1 1 0 1 1...

luogu P1681 最大正方形II

交了十幾遍才過,本來這只是一道水題,然而誰讓我快讀寫炸了呢 詳情見 gg記錄 6 f i j 表示i,j位置為右下角的最大正方形 如果i或j為1,很顯然,f i j 的值最大為1,否則便要從三個方向取最小值轉移 如果不滿足轉移的條件,將其賦值為1即可 includevoid read int y i...