Work at DP

轉載請註明出處:http://www.cnblogs.com/TSHugh/p/8858805.htmlhtml

Prepared:算法

(無notes的波蘭題目的notes見個人波蘭題目補全計劃)
BZOJ #3831.[Poi2014]Little Bird
BZOJ #2091.[Poi2010]The Minima Game
BZOJ #4385.[POI2015]Wilcze doły
BZOJ #4379.[POI2015]Modernizacja autostrady
BZOJ #3830.[Poi2014]Freight
LOJ #2450.「POI2010」綿羊 Sheep
BZOJ #2216.[Poi2011]Lightning Conductor
BZOJ #3711.[PA2014]Druzyny
BZOJ #3717.[PA2014]Pakowanie
BZOJ #3746.[POI2015]Czarnoksiężnicy okrągłego stołu
BZOJ #1435.[ZJOI2009]多米諾骨牌 插頭dp+容斥
  notes:
  輪廓線有妙用!
  除了插頭都想到了……
  個人感受:
  輪廓線的引入雖然會在必定程度上增多狀態數,可是會在很大程度上減小轉移的複雜度,因此這個東西有些時候是有很是的妙用的,尤爲是在網格圖上.
  這道題分板塊計算答案的思路仍是比較好的吧.數據結構

Preparing:學習

BZOJ #1138.[POI2009]Baj 最短迴文路
COGS #221.[NOIP2008] 雙棧排序
LOJ #2448.「POI2010」鐵路 Railway
BZOJ #3872.[Poi2014]Ant colony
BZOJ #2794.[Poi2012]Cloakroom
BZOJ #2803.[Poi2012]Prefixuffix
BZOJ #2526.[Poi2011]Inspection優化

Dealt:設計

CodeForces #814E.An unavoidable detour for home 動態規劃
  notes:
  我打的是O(n^5)的dp,主要仍是分析性質,分析狀態和轉移
UOJ #37.【清華集訓2014】主旋律 狀壓dp+容斥
  note:
  作不出來……
  一開始只想到直接算SCC的,走到黑也沒有去想反狀態……因此不要走到黑也不回頭啊……
  想到反狀態以後,仍是要想到如何容斥,就是說如何計算不是scc的方案數.因爲不是scc的圖縮點以後必定存在入度爲0的點,因此能夠容斥入度爲0的點,這個時候咱們能夠把入度爲0的scc的個數做爲容斥的對象.這個時候咱們就有了3^n的作法,固然這裏面還須要有些細節以及其餘的小套路.htm

Dealing:對象

LOJ #6094.「Codeforces Round #418」歸鄉迷途
UOJ #348blog

Notes:排序

就作了幾天的dp,因此說總結不是很全面,也不必定都是對的.技巧篇:  I.決策單調性的利用.決策單調性是dp優化的重要一環,利用它的方式能夠是數形結合(eg:斜率優化等)、數據結構(單調棧、單調隊列等)、分治等.固然,單調性也分爲不一樣的幾種,好比:決策點單調、關鍵點單調、決策方式單調(這已經包含了斜率的單調)等.這種數學化的思惟是dp學習者必須掌握的.    如何發現單調性:內心有單調性這種東西,再加上細心觀察或者數學分析.  II.猜想結論.我也不知道這樣作對不對,只是知道這樣作有時候頗有效.  III.輪廓線的運用.這在網格圖中用的比較多,感受起來是犧牲較少狀態數來換取較優的轉移,這每每有着較好的效果.  IV.數學角度無腦優化.先寫出轉移來,而後數學化以後利用數學無腦優化,彷佛在有些題中很好用.  V.網格圖分板塊計數.  VI.記憶化搜索以減小代碼複雜度.  VII.手玩.手玩樣例、手玩轉移等都會對於解決問題有必定的幫助.  VIII.枚舉二進制位轉爲枚舉二進制有效位.這會除個2,有時候就是從T到A的區別.   IX.按位搞事情.   X.二分&wqs二分&三分.   XI.圖的dp,轉移的時候枚舉與本身聯通的點集.思想篇:  I.問題模型的轉化.這一點的重要性是無疑的,不少的算法題都須要用到這種思想,這種思想在一些題目中能夠看做是部分分的實質,並且他在解決問題中的運用直接決定了算法的優劣.  II.容斥思想.這種利用組合計數原理來下降問題困難程度的方法在許多題目裏也是不可或缺的.  III.補集轉化.在原問題難以解決的時候考慮解決與原問題互補的反問題是一種不錯的思路.  IV.二元組計數.把平方計數轉化爲二元組計數,挺通用且常見的.  V.分析問題性質.eg:圖的性質、發現log或者根號等.  VI.分析構造問題的構造過程.這在構造問題中挺有效的.  VII.無用狀態的捨棄.這不只僅是常數或者剪枝,有時候捨棄掉無用狀態會對狀態和轉移起到不可小覷的優化與啓發.  VIII.多邊形劃分與區間的聯繫.  IX.最優子結構性質.搞清楚這個東西對於狀態與轉移的設計有幫助的.  X.差分思想.   XI.重構樹思想.這個東西能夠把一些看似分治的東西搞成樹形dp,至少如今我是這麼以爲的.重點篇:  I.dp的狀態設計.這真的很關鍵,每每狀態的設計直接決定了程序運行效率,並且狀態的設計,不僅是在dp中很重要,他在其餘算法領域也是十分關鍵的,這是一種思想,一種思惟,在有些難題的作法中,最能驚豔到你的就是狀態的設計.    有關狀態設計的思想:      1.轉化問題模型.      2.結合構造問題的構造過程.      3.分析問題性質(eg:圖的性質、發現log或者根號).      4.分析最優子結構性質.      5.增量構造.      6.差分思想.  II.dp的轉移設計.轉移每每創建在狀態設計的基礎之上,是決定dp題目程序運行效率的另外一關鍵因素,不過有些時候,巧妙的轉移對於狀態的設計與優化是有啓發做用的,固然,有的時候,轉移須要一些優化.    有關轉移設計的思想:      1.結合狀態.      2.數學角度(eg:組合數學等).      3.手玩.      4.分析最優子結構性質.      5.增量構造.      6.差分思想.    轉移的優化:      1.單調性.      2.數學(eg:數形結合、四邊形優化等).      3.數據結構.      4.分治.      5.問題性質(eg:根號、log等).       6.矩陣乘法.       7.差分思想.       8.有限狀態自動機.   III.發覺dp.有個別的題目很難發覺他是dp,要是說什麼題是dp什麼不是,這對於我來講還真不簡單,那麼作題的時候記着這玩意就行了吧.

相關文章
相關標籤/搜索