前一題只有一維,所以概念比較簡單一點,說是說DP 動態規劃啥的,其實就是前綴和而已,這邊就直接重講一遍。
e.g. 給一個1*3陣列
編號 | 0 | 1 | 2 |
value | 1 | 2 | 3 |
做完前綴和會變成
編號 | 0 | 1 | 2 |
value | 1 | 3 | 6 |
如果要算2~3的合就是array[ 3-1 ] - array [ 2-2 ] = array[ 2 ] - array[ 0 ] = 6-1 = 5 ;
如果要算1~3的合必須加上if( 如果編號減2小於0 ) = array[ 3-1 ] - 0 = 6-0 = 6;
只有上述兩種情況:編號扣完會小於0 跟 編號扣完不會小於0兩種。
本題的話就是跟前面一樣,只是要一維一維分開做前綴和:
1 | 2 | 3 |
4* | 5* | 6 |
7* | 8* | 9 |
做完前綴和:
1 | 3 | 6 |
4 | 9 | 15 |
7 | 15 | 24 |
再一行一行下去解即可
如果要算 (1,2)~(3,2) 標 * 號的區域,就是底下的array[ 1 ][ 1 ] - 0 再加上 array[ 2 ][ 1 ] - 0
ps 大維度很考驗個人腦袋性能,兩組(x,y)我已經不太行了,都感覺怪怪的,還需要輔助紙筆運算,再往上多開幾維就真的只能靠一股感覺做了.-.