tyvj1466 最美妙的矩陣

2021-06-25 12:41:57 字數 1750 閱讀 2714

背景 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中,不需要在每乙...