洛谷P1169 棋盤製作

2021-09-26 07:10:30 字數 1246 閱讀 4141

懸線法(好像)是可以解決給定矩陣中滿足條件的最大子矩陣的樣子

先就提論題

設 f[i][j] 為從(i,j) 點擴充套件最多能達到的最左端的點

\(\color\)

設l[i][j] 為從(i,j) 點擴充套件能達到的最右端的點

\(\color\)

設up[i][j] 為從(i,j)點能擴充套件到的上界

然後就是\(\color\)

從左往右掃 : f[i][j] = f[i][j-1] 

從右往左掃 : l[i][j] = l[i][j+1]

以上就是橫向的情況,那麼縱向的呢?

up[i][j] = up[i][j-1] 

r[i][j] = r[i-1][j]

l[i][j] = l[i-1][j]

#include#define maxn 2010

using namespace std ;

int a[maxn][maxn] , l[maxn][maxn] , r[maxn][maxn] , up[maxn][maxn] ;

int n , m , ans1 , ans2 ;

int main()

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

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

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

int a = r[i][j] - l[i][j] + 1 ;

int b = min(a,up[i][j]) ;

ans1 = max(ans1,b*b) ;

ans2 = max(ans2,a*up[i][j]) ;}}

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

}

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 棋盤製作(懸線法DP)

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

洛谷 P1169 題解

請你在乙個黑白矩陣中選出乙個長方形 含正方形 和正方形的子矩陣,使得所有相鄰的點顏色不一樣。矩陣大小 兩條邊都 2000 2000 2 000輸入 3 31 0 1 0 1 0 1 0 0輸出4 6解釋給定矩陣 正方形 長方形 我的控制台是萌萌噠 ffc0cb粉色 乙個小技巧 如果您的控制台是像我的...