Extreme Extension 思维,dp
生活随笔
收集整理的這篇文章主要介紹了
Extreme Extension 思维,dp
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
- 給一數組a,可對其中aia_iai?進行如下操作:將aia_iai?拆成兩數之和,然后代替aia_iai?加入數組中。設一個數組的 extremeextremeextreme valuevaluevalue 指的是:使得數組單調不下降的最小操作次數。據此,求a數組的所有子數組的 extremeextremeextreme valuevaluevalue 之和
思路:
- 先考慮一個數組,顯然,將末尾元素拆分是沒有意義的,且會使答案增大。而對于中間元素,例如 ...[17],5,10,23,...... [17], 5, 10, 23, ......[17],5,10,23,... ,如果它違反了單調不下降的規則,就必須進行拆分,可以有多種拆法,但使得其中最小元素盡可能大,是最優的拆法。例如,拆成(4,4,4,5)(4, 4, 4, 5)(4,4,4,5)比(3,3,3,3,5)(3, 3, 3, 3, 5)(3,3,3,3,5)更好,因為這可能減少前面需要的操作數量,因此,相當于讓拆分成的元素盡可能接近,且數量盡可能少,又要讓其中最大的小于ai+1a_{i+1}ai+1?,那么,對于當前的數aia_iai?和下一個數ai+1<aia_{i+1}<a_iai+1?<ai?,我們應當拆分,例如這里17應當分為?17/5?=4\lceil 17/5 \rceil = 4?17/5?=4個數,所以最小數是?17/4?=4\lfloor 17/4 \rfloor = 4?17/4?=4。顯然,如果aia_iai?比ai+1a_{i+1}ai+1?小,則認為我們將它“拆分成一個數”
- 這樣掃一遍下來,以O(n)O(n)O(n)解決了求解單個數組的問題,但是,子數組的數量是n2n^2n2數量級,不能全部這樣求解
- 考慮dpi,xdp_{i,x}dpi,x?是第iii個數被拆分成最小元素為xxx的若干個數,并且以xxx開頭的非遞減數列的數量。有dpi?1,ydp_{i-1,y}dpi?1,y? += dpi,xdp_{i,x}dpi,x?,因此可以轉化。
- 一個數nnn拆分為最小元素xxx ∈\in∈ {nnn,?n/2?\lfloor {n/2} \rfloor?n/2?,?n/3?\lfloor {n/3} \rfloor?n/3?,…,111},這個集合中元素個數不是n個,而是O(n1/2)O(n^{1/2})O(n1/2)數量級的,這一點在整除分塊的技巧中也有使用。
- 最終我們根據dpdpdp數組統計答案。對于dpi+1,xdp{i+1,x}dpi+1,x,它對答案的貢獻是i?dpi+1,x?(?ai/ai+1??1)i * dp_{i+1,x} * (\lceil a_i / a_{i+1} \rceil - 1)i?dpi+1,x??(?ai?/ai+1???1),這是因為有i?dpi+1,xi * dp_{i+1,x}i?dpi+1,x?個數列,每個數列對aia_iai?執行這樣的拆分
總結
以上是生活随笔為你收集整理的Extreme Extension 思维,dp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Moderate Modular Mod
- 下一篇: 软件设计师考试下午真题 数据流图 数据库