演算法 與 資料結構 Algorithm and Data Structure
- Dynamic Programming
鼎鼎大名的 DP,到底是什麼?
教育部國語辭典:好像應該查英漢辭典才對XD?
沒辦法簡而言之:DP是Dynamic Programming的縮寫,中譯為「動態規劃」。不用去體悟這四 個字的意義,因為實在看不大出來動態規劃是什麼鳥。
DP其實就是當問題可以被看成一些相關聯的子問題,且其中一些問題的 子問題互相重複時,可以把已解決的子問題之答案存下來,並利用這些已 知的子問題答案,去解決其他問題,進而解決最初的問題。
很籠統,希望你能得到它。
題目題目題目題目題目
再來,為了體會這個難以捉摸難以形容的DP,就讓我們透過一拖拉庫的題目來瞭解吧!
題目一 – 鉛塊鈾塊 (ACM 580, Critical Mass)
一個字串由很多U和L構成,如果這字串中有超過2個U連在一起,則說這個字串達到 Critical Mass。給定字串長度,問有幾種達到Critical Mass的字串?
題目二 – 最長共同子字串 (LCS, Longest Common Subsequence) (ACM 10405, LCS) 定義一個字串S由n個字符所構成,為S1, S2, …, Sn。
若對於二個字串A和S,存在一個嚴格遞增的整數列a1, a2, a3, …, ak,使得Aa1=S1, Aa2=S2,…, Aak=Sk,則稱S為A的子字串。
若對於字串A和B,S是為A的子字串也是B的子字串,則稱S為A和B的共同子字串。
若對於字串A和B,S是所有A和B的共同子字串中最長的,則稱S為A和B的最長共同子 字串。
給定兩個字串,問其共同子字串最長為多長?
題目三 – 最大0組成正方形 (ACM???)
在一個零一矩陣中,找一塊最大的正方形,裡面全部都是0。
試問這樣的正方形最大的邊長為多少?
題目四 – 找錢問題 (ACM 674, Coin Change)
給定某些幣值c1,c2,…cn,問要湊出恰好m元,至少要用多少硬幣?
題目五 – 背包問題 (ACM ???)
一個背包能裝載重量W,現有n個物品的重量分別為w1,w2…,wn,其價值分別為c1,c2…,cn, 問至多能裝入總價值多少的東西?
建中資訊培訓講義 (二) - by kelvin
題目六 – 矩陣相成 (ACM 442, Matrix Chain Multiplication)
有n個合法的矩陣要相乘,試問在所有不同的兩兩相乘順序中,最少要做幾次乘法運算?
題目七 – 最長遞增子序列 (LIS, Longest Increasing Subsequence) (ACM481, What goes up) 定義一個序列S由n個數字所構成,為S1, S2, …, Sn。
若對於二個序列A和S,存在一個嚴格遞增的整數列a1, a2, a3, …, ak,使得Aa1=S1, Aa2=S2,…, Aak=Sk,則稱S為A的子序列。其中若存在S1<S2<S3…<Sn的關係,則稱S為A的遞增子序 列。又如果S是所有A的遞增子序列中最長的,則稱S是A的最長遞增子序列。
給定一個數列A,問其最長遞增子數列有多長?
題目八 – 烏龜疊羅漢 (ACM 10154, Weight and Measures) 現在有n隻烏龜,編號i的烏龜其體重為wi,力量為fi。
現在要從這n隻烏龜裡面選幾隻出來疊成一堆,但每隻其上方的烏龜總重量加上自己的重量 不能大於自己的力量fi。
給定所有烏龜的wi和fi,試問最多可以疊幾隻烏龜?
題目九 – 弱弱數 (USACO section 3.1, Humble Numbers) (ACM443, Humble Numbers) 給定一個集合P={p1,p2,p3…,pn},其中pi是兩兩相異的質數。
若一個大於一的數h,其所有質因數都在集合P中,則稱h為一個Humble number。
對於給定集合P和一個正整數k,試求有小到大第k個Humber number。
題目十 – 伊甸園 (ACM 10001, Garden of Eden)
定義一個狀態S是由一串0與1代表的子狀態所組成,其長度為n,則第一個子狀態是S1, 第二個子狀態是S2……,第n個子狀態是Sn;定義對所有1<=i<=n,Si和Si-1、Si+1相鄰,而 Sn+1視做S1,S0視做Sn。定義一個狀態轉移是由S→S’,其中S’中的每個子狀態Si’只由Si- 1 、Si、Si+1決定,且對於同樣的{Si-1, Si, Si+1},Si’也相同。題目一開始會給定對應所有{Si-1, Si,
Si+1}的值辭Si’的值。若一個狀態S,除了當起始狀態,否則不可能由其他狀態經過狀態轉移
而到達S狀態,則稱S是Garden of Eden。
現給定長度n、所有狀態轉移規則和一個狀態S,試問:S是不是Garden of Eden?
長度n不超過32。
題目十一 – 加拿大旅行 (USACO Section 5.4, Canada Tour)
平面上有若干個城市,由西向東依次為c1, c2,…, cn。但並不是每個城市之間都有航線相通,
只有某些城市有飛機班次,這些相通的城市對是給定的。
現在希望從c1出發,一路經過的城市只能向東,到達某個城市後轉向,再一路向西經過若 干個城市回到c1,且這些城市都不能重複。
試問,最多能經過幾個城市?
建中資訊培訓講義 (二) - by kelvin
題目十二 – 最高頻率字串 (ACM 10234, Frequent Substrings)
一個字串S中,定義其連續子字串為S中一段位置連續的字符所組成。
定義一個連續子字串的發生次數為S中可以找到幾個這樣的連續子字串,這些找到的連續子 字串可以重疊。
給定字串S和整數n,試問發生次數最多且長度為n的連續子字串為何?
ps. 此題亦有Map (Hash)等其他做法。
科科科科科科科科科科科科科
嘿嘿,怕了嗎?
什麼,你簡直鬥志高昂?那來點DP難題吧!
不過要注意,剛開始接觸的時候,有時DP難是難在沒看出他可以DP喔。所以請記得,生活
處處有DP,閒來無事用DP;順手做DP,救救時間複雜度。
ps. 下面都頗困難,不會是正常,只是提供給覺得上面都太簡單的人看看XD。
題目一 – 最大0組成長方形 (ACM 108, Maximum Sum) …O(n2)?!
在一個零一矩陣中,找一塊最大的長方形,裡面全部都是0。
試問這樣的長方形最大的面積為多少?
題目二 – 松鼠吃松果 (ACM 10944, Nuts for Nuts) 格子上有n個松果,其中n<=15。
試問:從原點出發,最少要走多少距離才能吃到所有松果再走回原點?
題目三 – Hamilton夫婦 (ACM 11025, Mr. and Mrs. Hamilton)
有n個路口,其中n<=13,各個路口依次編號為0到12,Hamilton家在編號0的路口。
Hamilton先生有一天走在路上,突然想到一題頗難的ACM問題──說不定就是這題──於
是就開始絞盡腦汁的想。由於他腦中所有的CPU都拿去跑這個題目了,所以就開始在接道上 亂走。而所謂亂走,是每到一個路口,面度數條岔路,選取每一條的機率都相等。
經過無限長的時間後,在家中(0號點)的Hamilton太太發現他老公失蹤了,但她知道她老 公有這種ACM症候群,所以並不慌張,決定出門把他先生抓回來吃晚飯。
給定所有路口和所有相連路口的道路及其長度,試問:Hamilton太太應該按照順序去哪些路 口,才能使找到Hamilton先生時所需走的路程長度期望值最小?又期望值為多少?
你可以假設Hamilton太太出發後,Hamilton先生因為感受到太太的威力,就不敢再繼續遊 蕩,只會在原地(某個固定的路口)發呆。
題目四 – 水球硬度測試 (ACM 10934, Dropping Water Balloons) 有一棟n層樓的高樓(n<=264),與k顆水球(k<=100)。
你想要測試水球最高從幾層樓掉下來還不會破。如果測試後水球沒破,可以繼續使用;反之
建中資訊培訓講義 (二) - by kelvin
若破了,就無法再使用(因為用膠帶黏起來會造成誤差,熱融膠太昂貴,口水又不夠黏)。
試問:至少要測試幾次,才可以確知水球最高從幾層樓掉下來還不會破?
題目五 – 信使神 (IOI 2004, Hermes)
希臘天神中,Hermes是信使神,負責為各個神送信。
共有n位天神(n<=20000),所有天神居住的位置是個X*Y的格子點平面(X,Y<=1000)。
Hermes天生就具有適合送信的特異功能:他只要站在與收件天神的同X座標或同Y座標的
任何位置,就可以把訊息傳達給該位天神。
Hermes由(0,0)出發,必須依序送信給某些收件人。現給定各個收件人依序的座標,試問至少
要走多少路,才可以把所有信送完?
什麼?上面的題目又被你秒殺了?可惜沒題目啦,所以就下課吧科科!有意見就DP我啊!
[完]
建中資訊培訓講義 (二) - by kelvin