NYOJ 104 最大和(最大子串 乙個小技巧)

2021-07-11 08:53:21 字數 1024 閱讀 1559

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度: 5

描述 給定乙個由整數組成二維矩陣(r*c),現在需要找出它的乙個子矩陣,使得這個子矩陣內的所有元素之和最大,並把這個子矩陣稱為最大子矩陣。

例子:0 -2 -7 0 

9 2 -6 2 

-4 1 -4 1 

-1 8 0 -2 

其最大子矩陣為:

9 2 

-4 1 

-1 8 

其元素總和為15。 輸入

第一行輸入乙個整數n(0

輸出輸出矩陣的最大子矩陣的元素之和。

樣例輸入

1

4 40 -2 -7 0

9 2 -6 2

-4 1 -4 1

-1 8 0 -2

樣例輸出

15

聯絡乙個我們經常會用到的技巧:當我們需要頻繁計算乙個資料任意乙個區間

的和的時候,我們會預先把這個陣列使用a[i]=a[i]+s[i-1]的方式把它記錄的值變為陣列到這個位置的和,這樣的好處就是任意乙個區間[i,j]的和就可轉化為了s[i]-s[j-1]。

在這裡我們依然採用這樣的技巧。我們把這個矩陣記錄的值對於每個列向量都做上述改變。

然後我們就發現,但我們選取任意的連續行進行組合的時候,這個行區間對於的列的值的和都可以用上述方法快速獲得,那麼對於每個列的和又會變為乙個求一維連續區間最大和問題了。到此這個問題就可以以o(n^2)的複雜度解決了。

#include#include#define max1(x,y) x>y?x:y

int main()

for(i=n,max=a[1][1];i>=1;i--)

for(k=i;k>=1;k--)

}printf("%d\n",max);

memset(a,0,sizeof(a));

} return 0;

}

NYOJ104 最大和(dp 求最大子矩陣)

時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述 給定乙個由整數組成二維矩陣 r c 現在需要找出它的乙個子矩陣,使得這個子矩陣內的所有元素之和最大,並把這個子矩陣稱為最大子矩陣。例子 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 其最大子矩陣為 9 2 4 ...

最大子矩陣 NYOJ104

給定乙個由整數組成二維矩陣 r c 現在需要找出它的乙個子矩陣,使得這個子矩陣內的所有元素之和最大,並把這個子矩陣稱為最大子矩陣。這個問題就是最大值子區間和的二維問題。一維問題的解決思路是,max sum表示從第一數到目前的最大和,sum是某段區間的和,如果sum 0,那麼sum沒有利用價值了,把s...

nyoj 104 最大和 區間dp

時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述 給定乙個由整數組成二維矩陣 r c 現在需要找出它的乙個子矩陣,使得這個子矩陣內的所有元素之和最大,並把這個子矩陣稱為最大子矩陣。例子 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 其最大子矩陣為 9 2 4 ...