懸線法(好像)是可以解決給定矩陣中滿足條件的最大子矩陣的樣子先就提論題
設 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粉色 乙個小技巧 如果您的控制台是像我的...