做了幾道題讓我想起乙個問題,就是重疊子問題這個思想。
記得動態規劃優化問題的兩個要素就是,最優子結構和重疊子問題。
關於重疊子問題的優化,就是這些子問題可能多次用到,多次計算,所以可以事先計算了,然後用到的時候查表。
比如之前的codejam的b題,裡面就有重疊子問題,小資料的時候,一般都可以寫出,而大資料的時候你再用一般的方法,程式跑出結果的時間就非常慢,而如果事先預處理,將一定範圍的值先計算出來,需要的時候查表即可,速度快了很多。
再如uva 253題,你可以根據每次輸入進行立方體的旋轉變化,但如果你事先將24種狀態都計算出來,後面只需要對24種狀態查詢即可。
我們常常考慮問題都是對一組資料來看,所以往往最初設計或實現的演算法都是針對一組資料,稍加注意,就可以用重疊子問題來優化。有時候也能想到計算出乙個大範圍內的資料,但總會覺得計算得多了(比如,對於n=5,你只需要計算到5就行了,而你用打表的方法,可能是事先計算到n=10000;對於n=5這組資料來說,這樣的確是計算得太多了,但從整體輸入來說,省去了很多重複的計算)這樣的方法,單從一組資料來看,肯定是直接計算該組資料來得快些,但從大規模輸入資料,比如acm題的大量輸入來看,則優化了很多。有的直接是從o(n2)的複雜度降到了o(n);直觀的對比,就是codejam的b題,用兩種方法,效率差別太大。
之前自己已經有這個思想了,太久沒做題,好像忘了,剛剛做uva 253 自己突然想到了。藉此提醒一下自己。
DP 重疊子問題 POJ 3280
以案例給出的abcb為例 假定字串abcb的子串ab,形成回文字串有四種構造方法 1.刪除開頭的a ab b 2.刪除結尾的b ab a 3.在結尾增加a ab aba 4.在開頭增加b ab bab 經過以上四種構造方法,便已然講ab構成回文串的費用記錄於陣列中由以上類推,此dp的重疊子問題是 其...
margin top重疊問題
html 複製 如下 css樣式 複製 如下 box1 box2 解決方法 1 修改父元素的高度,增加padding top樣式模擬 padding top 1px 常用 2 為父元素新增overflow hidden 樣式即可 完美 3 為父元素或者子元素宣告浮動 float left 可用 4 ...
記憶體重疊問題
一 在記憶體拷貝時候,strcpy strncpy strcat strncat memcpy not ensure 均不允許記憶體重疊的。二 出現記憶體重疊問題的條件 1 src 在 des 的左邊 2 src size t count des至字串結束剩餘長度。解決方法 從後至前進行拷貝 src...