1. 程式人生 > >20170520 DP階段總結

20170520 DP階段總結

意見 難題 相對 為什麽 orz n) mark .... 遞推

  DP的力量不是無窮的。

  但是,因為它叫做“動態規劃”,它在OI界如魚得水。這個“動態”不是指“離線”與“在線”,也不是什麽“可持久化”。它只是把問題抽象為一個個“階段”,在每一個“階段”中作出或繁或簡的“決策”,並以此實現“狀態”與“狀態”間的“轉移”。

  正如紫書所言,動態規劃的理論性和實踐性都很強,一方面需要理解“狀態

”、"狀態轉移"、“最優子結構”、“重疊子問題”等概念,另一方面又需要根據題目的條件靈活設計算法。

  “根據題目的條件靈活設計算法”,可以說

希望是本無所謂有,無所謂無的。這正如地上的路;其實地上本沒有路,走的人多了,也便成了路。

——魯迅

  也可以說,對動態規劃的掌握情況在很大程度上能直接影響一個選手的分析與建模能力。


  分析與建模,是一種十分重要的能力。劉汝佳說,難題無外乎分三種:

  • 難想的
  • 難做的
  • 難調的

  分析與建模,便在很大程度上是關於“思考”。所以偉大的Scanf說,你寫出了轉移方程,就可以了。

  但真的是“可以”了嗎?我的答案是否定的。

  因為其實,想、做、調三者應該是一體的。(在此時Scanf讓我們提意見,ZJC說進新機房,臣附議

  DP優化就是一個典例。因為出題人的緣故(滿滿的仇恨感),每一次決策的時間必須壓縮,或是要簡化狀態本身。空間就是一個極大的犧牲品。DP本身即建立在“MLE”與“TLE”的夾縫之中,所以每一次優化總是讓人傷透腦筋。只要一點沒有想清楚,想要“做出來”便很難,“調出來”往往更難。

  所以,DP之伊始即是“分析與建模”。對於這類問題,Scanf總是說:“我們的同學是有思路的~只是實現能力沒有起來~”

  其實,任何代碼在開始前思路便能很清楚,甚至精確到行,那麽實現往往不是大問題。然而“我們的同學”(包括我)更多時候只是“有思路”,且不說“思路”正確與否,即使正確也很難一步到位。

SCOI 2017 醬油記

April 9, 2017

省選終於考完了啊。。
Day1:
先用10分鐘瀏覽了一遍題
看了看t1,感覺貪心好像是對的啊,寫了個堆搞一搞
再看t2,最近點似乎可以用點分,再加個樹剖維護第一個未簽到點,於是碼碼碼,碼完3.5h了
一看t3,臥槽計算幾何啊。。寫了發暴力。然後想到一個n^2sqrt的kd樹做法,後來沒調出來
最後230
Day2:
又先用10分鐘瀏覽了一遍題
t1切了
t2是兩道題加起來的,都可以O(n),然而我都只會nlog,於是T了40
t3寫了一個能過大樣例的n^2log暴力,但最後只得了10分。。orz
最後170
總分400,似乎挺靠前的

  仔細看看上面這段,MCFX同學的總結,你並不能看出他有任何的“特異功能”,遇到題目很多時候也會卡殼。但是他會深入的思考,會分析,會實踐。

  再次反觀我,我很多時候太急了,沒有掌握好節奏,沒有真正想清楚,效率就總是很低。

  當然,也不能一刀切,常常在碼題的時候,靈光一閃,沒準就創造了一種新算法。


  動態規劃是一種用途很廣的問題求解方法,它本身並不是一個特定的算法,而是一種思想,一種手段。動態規劃的核心是狀態和狀態轉移方程。遇見原問題,就把它分解為相對簡單的子問題。

  最優子結構性質,子問題重疊性質,無後效性。

  從遞推開始,再到背包,LIS,LCS。

  之後是區間DP。

  終於樹形DP來了。(DAG的拓撲性質)

  不厚道的就來了:

    FLOYD,(結合圖論)

    數位DP,(數的統計)

    狀壓DP,(結合二進制)

    概率DP,期望DP,(結合數學)

  既然可以結合數學,那為什麽不結合數據結構啊?或者不結合數據結構,直接簡化?

  • 倍增優化
  • 單調隊列優化
  • 斜率優化
  • 四邊形不等式優化
  • ......

  但是,還有,插頭、輪廓線……DP是人總結出來的,是永無止境的。

20170520 DP階段總結