1. 程式人生 > >淺談決策單調性在1D1D動態規劃中的運用

淺談決策單調性在1D1D動態規劃中的運用

1D1D動態規劃是指狀態數為O(n),每個狀態的決策數為O(n),直接求解的複雜度為O(n^2)的動態規劃方程。但這種方程往往都能夠通過一些合理的組織和決策優化到O(n log n)甚至O(n)的。
由於博主比較弱所以只分析下面幾種情況(其他的等會了有時間再補)

1.斜率優化

很奇怪我最開始接觸的竟然是這個效率最高的但適用性最窄的優化
具體來講,每一個決策可以看做一個二維平面上的點,某兩個決策的優劣性可以通過他們之間的斜率得出
並且隨著決策的不斷進行,我們所用來比較的斜率也是單調變化的
這樣我們就可以把決策點做成一個凸包,用單調佇列維護就可以了

2.CDQ分治

既然我們已經知道了決策時單調的,如果我們一個決定決策的複雜度不高,並且不依賴於其他的決策,那麼我們可以分治進行。
具體來說,我們每次暴力找出mid處的決策點,然後分治左右區間進行,這樣就減少了每次決策的複雜度。
但這種做法的適用性也不高,如果你一個決策的決定依賴於其他決策,那麼就GG了。

3.決策單調性

終於講到我主要想講的東西了
假入我們只知道最簡單的一個性質,就是決策單調性,那麼我們要怎麼做?
我們先來看一個例項:
最開始我們已經確定了1號點的狀態,那麼全域性的決策就變成了:
11111111111111(這裡的每個數字表示每個點的決策點)
那麼我們就可以得出2號點的狀態,接著它對全域性的影響:
11111111222222
接下來3號點的狀態我們也可以得出,假如它對全域性的影響是
11111111222222
33333333333
我們可以發現,最終我們的全域性決策會變為:
11133333333333
就是決策2已經沒有用了!
那麼我們的做法也就出來了,維護一個佇列,維護當前的每一個決策,相鄰的兩個決策所能控制的區間相接。
那麼我們從隊尾往前依次比較每一個決策點,如果當前決策在全域性看來都比隊尾決策優,那麼隊尾決策就是沒有用的,出隊。
否則我們就要二分一個轉折點,表示從這個轉折點開始,新決策比隊尾決策優,然後將新決策入隊。
這樣我們就做到O(n log n)來維護每一個決策點對於全域性的影響。
注意如果隊頭能影響的區間已經決策完了,那麼隊頭出隊。

相關推薦

決策調性1D1D動態規劃運用

1D1D動態規劃是指狀態數為O(n),每個狀態的決策數為O(n),直接求解的複雜度為O(n^2)的動態規劃方程。但這種方程往往都能夠通過一些合理的組織和決策優化到O(n log n)甚至O(n)的。 由於博主比較弱所以只分析下面幾種情況(其他的等會了有時間再補

決策調性動態規劃】noi2009詩人小G

關於決策單調性在網上有一篇非常好的論文----<1D1D動態規劃優化初步>. O(N^2)的演算法想必大家一定秒出了,可以發現這道題所用的方程是個經典1D1D方程:f[i]=min{f[j]+cost[i,j]}; 那麼我們的任務就是證明決策單調性在直接套用模板

bzoj1563: [NOI2009]詩人小G 決策調性(1D1D)

單調性 .com const cst 方程 algorithm tdi com stp 目錄 題目鏈接 題解 代碼 題目鏈接 bzoj1563: [NOI2009]詩人小G 題解 \(n^2\)dp長這樣 \(f_i = min(f_j + (sum_i - sum

TSP(Traveling Salesman Problem)-----旅行商問題(動態規劃,回溯實現)

  1.什麼是TSP問題   一個售貨員必須訪問n個城市,這n個城市是一個完全圖,售貨員需要恰好訪問所有城市的一次,並且回到最終的城市。   城市於城市之間有一個旅行費用,售貨員希望旅行費用之和最少。   完全圖:完全圖是一個簡單的無向圖,其中每對不同的頂點之間都恰連有一條邊相連。      2.T

洛谷P2900 [USACO08MAR]土地征用Land Acquisition(動態規劃,斜率優化,決策調性,線性規劃,單調隊列)

tps include 寫法 lan clas com mat 成了 dong 用兩種不一樣的思路立體地理解斜率優化,你值得擁有。 題意分析 既然所有的土地都要買,那麽我們可以考慮到,如果一塊土地的寬和高(其實是蒟蒻把長方形立在了平面上)都比另一塊要小,那麽肯定是直接並購,

BZOJ5125 小Q的書架(決策調性+動態規劃+分治+樹狀數組)

zoj esp 基礎 out 決策單調 註意 spa void get   設f[i][j]為前i個劃成j段的最小代價,枚舉上個劃分點轉移。容易想到這個dp有決策單調性,感性證明一下比較顯然。如果用單調棧維護決策就不太能快速的求出逆序對個數了,改為使用分治,移動端點時樹狀數

學習片機的一些職業規劃

單片機 FPGA 硬件工程師 芯片 ARM 這幾天看了很多關於“類似單片機的 出路”的帖子,也有很多人問我單片機未來的規劃。今天我就給大家帶來自己的一點心得體會,喜歡的朋友可以留下企鵝。首先,單片機不是萬能的,但沒有單片機那是萬萬不能的。從NN年前的單片機,到現在的單片機,單片機只是單片機

[Noi2016]區間[離散化+線段樹維護+決策調性]

fin include efi cmp http 說明 int min unique 4653: [Noi2016]區間 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 621 Solved: 329[Submit][

【BZOJ2216】[Poi2011]Lightning Conductor 決策調性

隊列 節點 zoj blog output tdi 最小 class clas 【BZOJ2216】[Poi2011]Lightning Conductor Description 已知一個長度為n的序列a1,a2,...,an。對於每個1<=i<=n,

bzoj4518: [Sdoi2016]征途(DP+決策調性分治優化)

clas code -1 long long lib fine bsp char click   題目要求...   化簡得...   顯然m和sum^2是已知的,那麽只要讓sigma(si^2)最小,那就變成了求最小平方和的最小值,經典的決策單調性,用分治優

Spring的AOP實現-動態代理

out handle 多功能 額外 java oid callback 淺談 驗證   說起Spring的AOP(Aspect-Oriented Programming)面向切面編程大家都很熟悉(Spring不是這次博文的重點),但是我先提出幾個問題,看看同學們是否了解,如

【bzoj2216】[Poi2011]Lightning Conductor 1D1D動態規劃優化

規劃 sample long 得到 mes tput stream truct 優化 Description 已知一個長度為n的序列a1,a2,…,an。對於每個1<=i<=n,找到最小的非負整數p滿足 對於任意的j, aj < = a

【ASP.NET MVC系列】和HTML輔助方法

繼承 好的 內容 概述 調用 復制 畫圖 models pac 【01】淺談Google Chrome瀏覽器(理論篇) 【02】淺談Google Chrome瀏覽器(操作篇)(上) 【03】淺談Google Chrome瀏覽器(操作篇)(下) 【04】淺談AS

BZOJ_1563_[NOI2009]詩人小G_決策調性

esp con algo pri 技術分享 r++ div 方案 句子 BZOJ_1563_[NOI2009]詩人小G_決策單調性 Description Input Output 對於每組數據,若最小的不協調度不超過1018,則第一行一個數表示不協調度若最

決策調性

復雜 stream 添加 雙端隊列 math str 相關 void 代碼 決策單調性 單調隊列和斜率優化是屬於決策單調性的一種。而決策單調性是滿足四邊形不等式的前提下,滿足i+1-n的轉移點大於等於i的決策點。而基本實現方式是整體二分或者維護雙端隊列並且在雙端隊列上二分

bzoj 2216 [Poi2011]Lightning Conductor 決策調性+dp

pre inline 假設 int efi 當前 www. 記錄 sin 題面 題目傳送門 解法 決策單調性比較經典的題吧 題目就是要對於每一個\(i\)求\(f_i=max(a_j-a_i+\sqrt{|i-j|}))\) 可以發現,\(\sqrt n\)的增長速度比較慢

bzoj 1563 [NOI2009]詩人小G 決策調性+dp

ref bit std online mes pac c++ () include 題面 題目傳送門 解法 可以得到一個顯然的dp方程 $\(f_i=min(f_j+(s_i-s_j+i-j-1-L)^p)\) 不妨把後面的東西看成\(w(j,i)\) 所以就變成\(f_i

【BZOJ4444】國旗計劃 - 決策調性

還要 方向 img 二分 線上 () 形式 代碼 dep Description A國正在開展一項偉大的計劃——國旗計劃。這項計劃的內容是邊防戰士手舉國旗環繞邊境線奔襲一圈。這項計劃需要多名邊防戰士以接力的形式共同完成,為此,國土安全局已經挑選

洛谷P1973 [NOI2011]Noi嘉年華(決策調性

ons char 決策單調 problem isdigit stream tdi amp pri 傳送門 鑒於FlashHu大佬講的這麽好(而且我根本不會)我就不再講一遍了->傳送 1 //minamoto 2 #include<iostre

Codeforces 868F. Yet Another Minimization Problem【決策調性優化DP】【分治】【莫隊】

LINK 題目大意 給你一個序列分成k段 每一段的代價是滿足\((a_i=a_j)\)的無序數對\((i,j)\)的個數 求最小的代價 思路 首先有一個暴力dp的思路是\(dp_{i,k}=min(dp_{j,k}+calc(j+1,i))\) 然後看看怎麼優化 證明一下這個DP的決策