演算法練習 矩陣字首求和 補充了刷題心得

2021-10-10 15:06:14 字數 1147 閱讀 8771

一、問題特點

一維陣列中轉變為字首和陣列之後,每一行就代表著前幾項的總和,同理字首和矩陣中每乙個元素代表著以這個乙個元素為右下角矩陣裡面所有元素的和。

比如有一陣列如下:

map[2][3]

123

456

那麼對應的字首和為:

sum[2][3]

136

51221

二、求乙個矩陣的字首和矩陣規律

乙個矩陣的字首和矩陣的每乙個元素等於原矩陣對應的元素+字首和矩陣對應元素同一行的前一列元素+字首矩陣對應元素同一列的前一行元素-字首矩陣對應元素對角的那個元素,記憶如下:

sum[i]

[j]=map[i]

[j]+sum[i-1]

[j]+sum[i]

[j-1

]-sum[i-1]

[j-1];

//求矩陣字首和

map為原矩陣,sum為map對應的字首和矩陣

比如上面那個例子,在原矩陣中(1,1)對應的字首和矩陣sum[1][1]=5+3+5-1=12

三、**實現如下:

#include

#include

using

namespace std;

int sum[

1010][

1010

],map[

1010][

1010];

intmain()

cout<<

"列印開始!!!"

int i=

1; i<=n; i++

) cout<}//cout<<"列印結束"<}

四、刷題心得

都說了很多次,做題的時候,不要一下子就模擬,先分析資料的特點,看能否找到規律,以後看到矩陣變化的時候,就去分析變化後的矩陣和原矩陣的元素有什麼關係,是要同時看兩個矩陣,而不是單單只研究其中乙個矩陣,這個字首和矩陣的規律,就是通過這樣分析得到的不僅是矩陣,以後出現那種變化的題目,都要去分析變化前後的資料有什麼特點,找規律。

海嘯 矩陣字首和

有乙個沿海地區,可以看作有n行m列的城市,第i行第j列的城市海拔為h i j 由於沿海,所以這個地區經常會發生海嘯。海嘯發生時,部分城市會被淹沒,具體來說,海水高度會達到d,因此海拔低於d的城市都會被淹沒。現在有q次詢問,每次問你乙個矩形區域中,有多少城市不會被淹沒。第一行三個整數n,m,d,具體含...

01矩陣字首和

題目描述 給定乙個 n m 的 01 矩陣,求包含 l,r 個 1的子矩形個數。第一行,兩個正整數 n,m。接下來 n行每乙個長度為 m的 01 串,表示給定的矩陣。接下來 一行,兩個自然數 l,r。首先暴力列舉顯然不可取 注意到,n非常小,可以考慮一種 o n 2m 的方法 很套路,要將詢問拆成 ...

最大化(矩陣字首和)

矩陣字首和 神奇的剪枝 矩陣字首和 如圖,a 2 2 的字首和就是2 3 2 7,a 1 4 的字首和就是2 3 4 8 以此類推,每乙個座標的字首和,都是該座標到矩陣左上角的數字之和 這樣,任意子矩陣的數字和,可以在o 1 時間內查詢 實現 for int i 1 i n i for int j ...