題意:給定乙個n*m大小的0-1矩陣,求所有元素都為1的最大子矩陣。
思路:把2維轉化為一維(這一點有點像poj1050求最大子矩陣),列舉每一行。dp[i][j]的值表示第(i,j)個位置作為底,它上面的(包括自己)的連續1的個數。然後通過棧的單調性求每行的「最大值」(每行的情況如同poj2559)。可以用滾動陣列優化。
#include #include #define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define n 2002
struct stackstack[n];
int dp[n][n];
int n,m;
int test(int x[n]){
int top,i,temp,res=0;
x[m+1] = -1;
top = -1;
for(i = 1;i<=m+1;i++){
while(top>-1 && x[i]
POJ 3494(最大全1子矩陣,單調棧)
題目 分析 相當於是最大直方和的二維版,對於最大直方和問題,我們對每個點找到最左邊大於等於它的位置和最右邊大於等於它的位置,用乙個單調棧可以在o n 空間o n 時間內完成,對於本題,我們即分別將每一行作為直方圖的x軸,所以時間上是o mn 空間上仍需o n 輔助 include define ma...
dp 最大全1子正方形
例題1 usaco big barn 巨大的牛棚農夫約翰想要在他的正方形農場上建造一座正方形大牛棚。他討厭在他的農場中砍樹,想找乙個能夠讓他在空曠無樹的地方修建牛棚的地方。我們假定,他的農場劃分成 n x n 的方格。輸入資料中包括有樹的方格的列表。你的任務是計算並輸出,在他的農場中,不需要砍樹卻能...
最大全1子矩陣
題目描述 在乙個m n的矩陣中,所有的元素只有0和1,從這個矩陣中找出乙個面積最大的全1子矩陣,所謂最大是指元素1的個數最多。輸入 輸入可能包含多個測試樣例。對於每個測試案例,輸入的第一行是兩個整數m n 1 m n 1000 代表將要輸入的矩陣的大小。矩陣共有m行,每行有n個整數,分別是0或1,相...