DP演算法之最大欄位和 最長單調子串行相似借鑑之處

2021-06-22 14:53:22 字數 569 閱讀 6386

dp演算法最大欄位和 a[1...n]

找出連續子串行和最大的乙個

(曹博的ppt裡面看到的)dp演算法 最長單調遞增(遞減)子串行 a[1...n]   王曉東演算法書一道習題記得是

找出未必連續的 最長的 單調遞增子串行

dp[i]: 表示a[1...i]的最長單調遞增子串行,由於是否加乙個元素與之前解的最後乙個元素大小有關,因此用j記錄

dp[i-1]的最優解最後乙個元素,

dp[i]=dp[i-1]+1  a[i]>a[j],j記錄之前的最後乙個元素index

dp[i-1]  a[i]1? 後來發現不可能, 假設b[j-1] <0, a[j] 較大,如果b[j]裡面,有

更優解 a[k...j-1,j] 那麼大於a[j] 所以sum a[k...j-1]>0, b[j-1]比存在乙個大於0的最優解,與假設矛盾,所以b[j-1]<0

時,a[j]必是最優解,沒有其他情況大於他。

所以總之,完全不依賴模板題寫乙個新的dp是比較難的,因為極有可能就是錯的,驗證就是舉反例,但有時不好舉,舉不出又不能說明正確,當時我問沈老師,

他也說了,dp演算法是有一點難的演算法

最大欄位和(dp)

設a i dp i 我們在選擇乙個元素a j 的時候,只有兩種情況,將a i 至a j 1 加上,或者從a j 以j為起點開始。我們用乙個陣列dp i 表示以i為結束的最大子段和,對於每乙個a i 加上dp i 1 成為子段,或以a i 開始成為新段的起點。因為我們只需要記錄dp值,所以複雜度是o ...

最大欄位和小結 DP

詳情可以看這裡的講解,很詳細 poj2479 模板題,即求兩個段的最大子段和 poj2479 dp i j 表示包含第i個數的前i個數劃分為j個子段和的最大值 dp i j max j 1 k include define inf 10000000 using namespace std int d...

最大欄位和演算法

最大欄位和演算法 這個演算法在本學期的課程中,已經稍作了解。不過印象不夠深刻。今天重新複習一下,加深理解。最大欄位和,無非就是三種情況 max在左半部分 max在右半部分 max在中間 均可以使用遞迴來解決,情況三也並不是很複雜。先附上 然後逐條解釋。public class solution re...