傳送門給定乙個\(n*m\)的\(0/1\)矩陣,求最大子矩陣:滿足矩陣內所有元素均為\(1\).
輸出矩陣大小\(*3\)
懸線法,最大子矩陣板子題
(也可以單調棧和並查集,但是窩不會)
維護三個值\(l[i][j]\)和\(r[i][j],up[i][j]\),分別代表當前點\((i,j)\)向左最長的延伸到的點位置,向右最長的延伸到的點位置,向上最長的延伸長度
(我們稱當前點和其左右相鄰的點都是\(1\)的話就可以延伸。也就是說,如果當前點\(a[i][j]==1\),那麼這個點就非法)
所以我們可以直接列舉\(i,j\)找到這個矩陣就行了/fad
具體實現看**
#includeusing namespace std;
template inline void read(t &x)ch=getchar();}
while(isdigit(ch))
x=f?-x:x;
return ;
}template inline void write(t x)
const int n=1005;
int n,m;
int a[n][n],l[n][n],r[n][n],up[n][n],ans;
char op[2];
int main()
} for(int i=1;i<=n;i++)
} for(int i=1;i<=n;i++)
} for(int i=1;i<=n;i++)
ans=max(ans,(r[i][j]-l[i][j]+1)*up[i][j]);
} }write(ans*3);
return 0;
}
玉蟾宮 洛谷P4147
題目描述 有一天,小貓rainbow和freda來到了湘西張家界的天門山玉蟾宮,玉蟾宮宮主藍兔盛情地款待了它們,並賜予它們一片土地。這片土地被分成nm個格仔,每個格仔裡寫著 r 或者 f r代表這塊土地被賜予了rainbow,f代表這塊土地被賜予了freda。現在freda要在這裡賣萌。它要找一塊矩...
P4147 玉蟾宮 單調棧
有一天,小貓rainbow和freda來到了湘西張家界的天門山玉蟾宮,玉蟾宮宮主藍兔盛情地款待了它們,並賜予它們一片土地。這片土地被分成n m個格仔,每個格仔裡寫著 r 或者 f r代表這塊土地被賜予了rainbow,f代表這塊土地被賜予了freda。現在freda要在這裡賣萌。它要找一塊矩形土地,...
P4147 玉蟾宮 單調棧
有一天,小貓rainbow和freda來到了湘西張家界的天門山玉蟾宮,玉蟾宮宮主藍兔盛情地款待了它們,並賜予它們一片土地。這片土地被分成n m個格仔,每個格仔裡寫著 r 或者 f r代表這塊土地被賜予了rainbow,f代表這塊土地被賜予了freda。現在freda要在這裡賣萌。它要找一塊矩形土地,...