動態規劃小結

2021-07-12 05:29:15 字數 1891 閱讀 5481

1.最長上公升子串行問題:

給出乙個由n個數組成的序列x[1..n],找出它的最長單調上公升子串行。即求最大的m和a1,

a2……,am,使得a12.動態規劃求解思路分析:(o(n^2))

經典的o(n^2)的動態規劃演算法,設a[i]表示序列中的第i個數,f[i]表示從1到i這一段中以i結尾的最長上公升子串行的長度,初始時設f[i] = 0(i = 1, 2, ..., len(a))。則有動態規劃方程:f[i] = max (j = 1, 2, ..., i - 1, 且a[j] < a[i])。

3.(1) n條直線最多分平面問題

題目大致如:n條直線,最多可以把平面分為多少個區域。

析:可能你以前就見過這題目,這充其量是一道初中的思考題。

但乙個型別的題目還是從簡單的入手,才容易發現規律。當有n-1條直線時,

平面最多被分成了f(n-1)個區域。則第n條直線要是切成的區域數最多,

就必須與每條直線相交且不能有同一交點。這樣就會得到n-1個交點。

這些交點將第n條直線分為2條射線和n-2條線斷。而每條射線和線斷將以

有的區域一分為二。這樣就多出了2+(n-2)個區域。

故:f(n)=f(n-1)+n=f(n-2)+(n-1)+n

……=f(1)+1+2+……+n

=n(n+1)/2+1

(2) 折線分平面(hdu2050)

根據直線分平面可知,由交點決定了射線和線段的條數,進而決定了新增的區域數。

當n-1條折線時,區域數為f(n-1)。為了使增加的區域最多,則折線的兩邊的線段

要和n-1條折線的邊,即2*(n-1)條線段相交。那麼新增的線段數為4*(n-1),

射線數為2。但要注意的是,折線本身相鄰的兩線段只能增加乙個區域。

故:f(n)=f(n-1)+4(n-1)+2-1=f(n-1)+4(n-1)+1

=f(n-2)+4(n-2)+4(n-1)+2

……=f(1)+4+4*2+……+4(n-1)+(n-1)   

=2n^2-n+1

(3) 封閉曲線分平面問題

題目大致如設有n條封閉曲線畫在平面上,而任何兩條封閉曲線恰好相交於兩點,

且任何三條封閉曲線不相交於同一點,問這些封閉曲線把平面分割成的區域個數。

析:當n-1個圓時,區域數為f(n-1).那麼第n個圓就必須與前n-1個圓相交,

則第n個圓被分為2(n-1)段線段,增加了2(n-1)個區域。

故: f(n)=f(n-1)+2(n-1)=f(1)+2+4+……+2(n-1)

=n^2-n+2

(4)平面分割空間問題(hdu1290)

由二維的分割問題可知,平面分割與線之間的交點有關,即交點決定射線和線段的條數,

從而決定新增的區域數。試想在三維中則是否與平面的交線有關呢?當有n-1個平面時,

分割的空間數為f(n-1)。要有最多的空間數,則第n個平面需與前n-1個平面相交,

且不能有共同的交線。即最多有n-1 條交線。而這n-1條交線把第n個平面最多分割成

g(n-1)個區域。(g(n)為(1)中的直線分平面的個數)此平面將原有的空間一分

為二,則最多增加g(n-1)個空間。

故:f=f(n-1)+g(n-1)    ps:g(n)=n(n+1)/2+1

=f(n-2)+g(n-2)+g(n-1)

……=f(1)+g(1)+g(2)+……+g(n-1)

=2+(1*2+2*3+3*4+……+(n-1)n)/2+(n-1)

=(1+2^2+3^2+4^2+……+n^2-1-2-3-……-n )/2+n+1

=(n^3+5n)/6+1

感覺不錯的:一,最大子串行、最長遞增子串行、最長公共子串、最長公共子串行、字串編輯距離 - orisun -

二,乙個顯示排序過程的python指令碼 | 酷 殼 - coolshell.cn

動態規劃小結

現在做一下動態規劃的小結 1.揹包問題 這是一類超級經典很基礎的動態規劃,好多動態規劃題目都能用揹包的方法寫出或者是揹包的變形.這些在揹包九講中說的很清楚 鏈結 這是網上我隨便找的乙個講的比較全的部落格 這些揹包問題給我的乙個啟發就是 轉換,通過一系列的操作,轉換為01揹包 揹包給我的感受 很大一部...

動態規劃小結

近期覺得動態規劃的題目一直不能夠很好的理解,自己也不能很好的掌握,因此就做了一定量的練習,使得自己能夠掌握這一類題目的思路。動態規劃在維基百科的定義為 一種在數學 管理科學 電腦科學 經濟學和生物資訊學中使用的,通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。動態規劃的思想為 若要解決乙...

動態規劃 小結

關鍵字 動態規劃 動態規劃其實質上是通過開闢記錄表,記錄已求解過的結果,當再次需要求解的時候,可以直接到 那個記錄表中去查詢,從而避免重複計算子問題來達到降低時間複雜度的效果。實際上是乙個空間 換時間的演算法。動態規劃,通常可以把指數級的複雜度降低到多項式級別。一般演算法書都會講能不能用動態規劃來求...