連續區間最大和問題指的是在給定的一串串行中找出和最大的連續區間。解決這類問題有下面五種方法:
1. o(n^3) 暴力列舉
這種方法就不需要多說了,最簡單的方法,但複雜度很高,資料量大時不可取。
2. o(n^2) 預處理+列舉
這種方法無非是在上一種方法的基礎上做些優化。sum[i]表示從1-i 這段區間的和,在輸入的時候就可以進行預處理,列舉每一段區間 i-j 其和為 sum[j]-sum[i-1]。雖然加了預處理優化,但面對大資料量時人仍無能為力。
3. o(nlogn) 分治
其大致思想是,若對於一段區間[l,r),其中mid=(l+r)>>1,將區間分成左右兩邊[l,mid),[mid,r),對於兩邊區間,我們可以遞迴求解,而對於橫跨左右兩段區間的區間,我們再特殊處理。
核心**:
經典的dp問題,狀態轉移方程:dp[i]=max
5. o(n) xx
先像方法4那樣預處理,然後線性掃瞄,每次維護乙個連續區段的最小值min(sum[1]-sum[i-1]),然後更新連續區間最大和ans=max(ans,sum[i]-min)。
核心**:
hdu1540(線段樹求連續區間最大和)
題意 最初1 2 3 n按照順序每個點與相鄰的和兩點相連成一條鏈。三種操作d 毀掉x r 恢復上次毀掉的 q 查詢與x直接相連或者間接相鄰的數量 包括自己 題目型別 線段樹求區間連續最大和的模板題目 思路 維護區間從左端點開始最大連續個數lsum,以及當前區間從右端點開始最大連續的個數rsum。重點...
線段樹區間合併 連續區間問題
hdu 1540 資料很奇葩。用討論區裡面的話形容這題很合適 九九八十一難,這道題比北大的資料真是坑出翔來了 poj 2892 原題 一摸一樣 題意 給定n個村莊排成一行,它們相鄰的村莊通過地道相連,有三種操作 1 炸毀第x個村莊 2 修復上乙個被炸毀的村莊 3 詢問 輸出 第x個村莊還能和幾個村莊...
連續區間和模板
水果店裡有 nn個水果排成一列。店長要求顧客只能買一段連續的水果。小陽對每個水果都有乙個喜愛程度 aiai,最終的滿意度為他買到的水果的喜歡程度之和。如果和為正 不管是正多少,只要大於 0 即可 他就滿意了。小陽想知道在他滿意的條件下最多能買多少個水果。你能幫幫他嗎?第一行輸入乙個正整數 n,表示水...