背景 background
candy的生日即將到來,飄飄乎居士希望找到乙個最美妙的矩陣送個candy作為禮物
描述 description
飄飄乎居士從pink處得知最美妙的矩陣滿足三個條件:首先,它的長和寬都必須和矩陣的邊界平行(也就是不可以出現斜的矩陣);第二:子矩陣橫豎都要滿足單調遞增(可以相等,也就是對於每乙個最優子矩陣的元素都要滿足a[i][j]>=a[i-1][j] and a[i][j]>=a[i][j-1],其中a[i][j]表示矩陣第i行第j列的數字);第三:最優矩陣是在滿足上述兩個條件中面積最大的矩陣。
輸入格式 inputformat
第一行,兩個正整數n,m
接下來n行,每行m個數字,構成乙個n*m的矩陣
輸出格式 outputformat
一行,代表最優矩陣的面積
樣例輸入 sampleinput [複製資料]
c++1
2
3
4 34
2444 444
2 342
5
樣例輸出 sampleoutput [複製資料]
c++1
6資料範圍和注釋 hint
最優子矩陣為
2 4 4
4 4 4
該矩陣滿足橫豎都單調遞增,並且是所有滿足條件中面積最大的。其中矩陣長為3寬為2,面積為6,也就是最後的答案。
對於30%的資料 0**
時間及空間複雜度
題解時間複雜度:o(n^6)
空間複雜度:o(n^2)
方法一:枚舉子矩陣的每乙個左上角座標和右下角座標,在逐個檢查列舉的矩陣是否符合單調特性。預期得分30
時間複雜度:o(n^3)
空間複雜度:o(n^3)
方法二:預處理column[i][j]以及can[i][j][k]陣列。
其中column[i][j]表示座標為i j的點能向上單調遞減的長度。則
column[i][j]=
用can[i][j][k]表示從第i行到第j行中的第k列能否接道第i行到第j行的k-1列中,則關於can[i][j][k]=true的條件為
(can[i][j-1][k])and(column[j][k]>=j-i+1)and(a[j][k]>=a[j][k-1])and(coulumn[j][k-1]>=j-i+1。
接下來用f[i][j][k]表示從第i行到第j行中,第k列的最大子矩陣
f[i][j][k]=f[i][j][k-1]+j-i+1 (can[i][j][k]=true)
=j-i+1 (can[i][j][k]=false and column[j][k]>=j-i+1)
=0 (else)
預期得分100
#include#includeusing namespace std;
int n,m,a[201][201],u[201][201],f[201][201][201],ans;
bool can[201][201][201];
int main()
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
for(int k=1;k<=m;k++)
printf("%d",ans);
return 0;
}
繼續
tyvj 叢林探險
東非大裂谷中有一片神秘的叢林,是全世界探險家的樂園,著名黃 探險家bb一直想去試試。正好我國科學家2005年4月將首次對東非大裂谷進行科考,bb決定隨科考隊去神秘叢林探險。在出發之前,他蒐集了國內外有關神秘叢林探險的資料,並繪製成一張地圖 該地圖上有若干安全點 包括入口點和出口點 並將這些安全點編號...
HAProxy1 4 6後端Keepalive配置
keepalive 就是通常所稱的長連線,keepalive帶來的好處是可以減少tcp連線的開銷,這對於短response body的請求效果更加明顯。haproxy後端keepalive指的是在haproxy服務完一次與後端的互動 後,不關閉haproxy和後端 的連線,而是維護這個連線以備後續的...
146,流程控制語句
迴圈結構 for,for in,while,do while 選擇結構 if,switch 注 所有語句都必須在大括號裡面。取出範圍裡面所有的值 for v in 1.3 1 2 3注 v是常量!如果不需要用到迴圈中的常量v,可以使用下劃線 進行忽略 for in1.3 在while中,不需要在每乙...