動態規劃小結(1)最大子段和

2021-12-29 21:49:15 字數 1346 閱讀 6146

print? 1.對於一維問題,求解乙個序列中的連續子段的最大和。 

狀態:一維陣列dp[i]:以i結尾的最大子段和,並非前i項的最大子段和,二者有區別。 

轉移:if dp[i]>0  

dp[i+1]=dp[i]+a[i] 

else 

dp[i+1]=dp[i] 

ans=max(dp[k];k=1,2,....n), 

空間上可以用滾動陣列的原理優化,空間複雜度o(1)。 

if ans>0 dp+=a[i] 

else dp=a[i] 

ans=max(dp) 

hoj 1760 the jackpot 

2.二維。 

預處理出每行(列)的和,sum[i][j]表示第i行第1->j列的和。 

用o(n^3)的複雜度列舉所有的矩形,列舉乙個行,兩個列。 

對於乙個矩形,行都縮為乙個點,對列轉化成為一維問題處理。 

hoj 2558 maxsum   

3.三維 

和二維轉化成一維的情況完全類似。 

先預處理出底面(或其他面)的二維矩陣和。 

sum[i][j][k]:第i層,對角端點為(1,1)和(j,k)的矩陣的元素和。 

然後用o(n^5)的複雜度列舉所有的立方體,將底面縮為乙個點,對剩下一維作為一維處理。 

hoj 2555 

1.對於一維問題,求解乙個序列中的連續子段的最大和。

狀態:一維陣列dp[i]:以i結尾的最大子段和,並非前i項的最大子段和,二者有區別。

轉移:if dp[i]>0

dp[i+1]=dp[i]+a[i]

else

dp[i+1]=dp[i]

ans=max(dp[k];k=1,2,....n),

空間上可以用滾動陣列的原理優化,空間複雜度o(1)。

if ans>0 dp+=a[i]

else dp=a[i]

ans=max(dp)

hoj 1760 the jackpot

2.二維。

預處理出每行(列)的和,sum[i][j]表示第i行第1->j列的和。

用o(n^3)的複雜度列舉所有的矩形,列舉乙個行,兩個列。

對於乙個矩形,行都縮為乙個點,對列轉化成為一維問題處理。

hoj 2558 maxsum

3.三維

和二維轉化成一維的情況完全類似。

先預處理出底面(或其他面)的二維矩陣和。

sum[i][j][k]:第i層,對角端點為(1,1)和(j,k)的矩陣的元素和。

然後用o(n^5)的複雜度列舉所有的立方體,將底面縮為乙個點,對剩下一維作為一維處理。

hoj 2555

動態規劃 最大子段和

給定乙個陣列a a0,a1,a2,an 求陣列中 連續子段之和 的最大值。1 最簡單的演算法 窮舉法 計算所有的連續子段之和,得出最大值 窮舉法 計算所有的子串行和 o n 3 public static int maxsum1 int data max tmp max tmp max return...

動態規劃 最大子段和

題目描述 給出一段序列,選出其中連續且非空的一段使得這段和最大。輸入輸出格式 輸入格式 第一行是乙個正整數nn,表示了序列的長度。第二行包含n個絕對值不大於10000的整數a i,描述了這段序列。輸出格式 乙個整數,為最大的子段和是多少。子段的最小長度為1。輸入輸出樣例 輸入樣例 1 72 4 3 ...

動態規劃 最大子段和

動態規劃 最大子段和 lyk喜歡幹一些有挑戰的事,比如說求區間最大子段和。它知道這個題目有o n 的做法。於是它想加強一下。也就是說,lyk一開始有n個數,第i個數字是ai,它找來了乙個新的數字p,並想將這n個數字中恰好乙個數字替換成p。要求替換後的最大子段和盡可能大。lyk知道這個題目仍然很簡單,...