一些部落格
乙個比較完整的總結
帶權二分
決策單調性
未來費用區間dp
做題記錄
參考**
[x] poi2014 pta-little bird
設 \(f[i]\) 表示到達第 \(i\) 課樹時的最小代價,dp方程為:
\[f[i]=\min_\}-a_i\)
先不管最後的 \(a[i]\),打表可知,前半部分的轉移是有決策單調性的。於是我們可以用佇列模擬二分棧來解決這一問題。值得注意的是,為了便於計算,我們先假設所有的 \(i\) 都由乙個小於自己的 \(j\) 轉移過來,也就是說先不管絕對值。為了得到最終的答案,我們還需要把數列反轉,再求一遍並取max。
參考**
[x] sdoi2016 征途
一道帶權二分+斜率優化的題目。
先將題目中要求的式子轉化一下:
\[\begin
s^2\times m^2&=m\sum_^
\\&=m\cdot[\sum_^^}]
\\&=m\sum_^-(\sum_^)^2
\end
\]於是問題轉化為了使得 \(\sum_^\) 最小。
令 \(f[i][j]\) 表示第 \(j\) 天走完 \(i\) 段時上式的最小值。可以得到:
\[\begin
f[i][j]&=\min_
\]其中 \(w[i][j]\) 表示在 \([i,j]\) 中建郵局的最小距離和,它如何計算呢?
首先有乙個結論:若區間長度為奇數,那麼將郵局建在中位數處距離和最小;若為偶數,那麼建在中間兩個之間的任意位置都一樣。
所以,我們可以分類討論:
綜上,我們得到了遞推式:
\[w[i][j]=w[i][j-1]+d[j]-d[\frac]
\]然後就是四邊形優化的套路了,外層正序列舉 \(j\),內層逆序列舉 \(i\),\(k\) 的範圍為 \([s[i][j-1],s[i+1][j]]\)。( \(s\) 表示最優決策點)
參考**
[x] 六省聯考2017 組合數問題
考慮給出式子的組合意義,相當於從 \(nk\) 個不同物品中選出 \(t\) 個,且滿足 $t\mod k=r $ 的方案數。我們設 \(f[i][j]\) 表示當前考慮到第 \(i\) 個物品,所選數量 \(\mod k\) 為 \(j\) 的方案數,遂於每個物品有選與不選兩種選擇,所以:
\[f[i][j]=f[i-1][j]+f[i-1][j-1]
\]發現每一次轉移都只與 \(f[i-1]\) 有關,所以可以矩陣加速,轉移矩陣為:
\[\begin f_\\ f_\\ f_\\ \vdots \\ f_\\ \end = \begin 1 & 0 & \cdots & 0 & 1 \\ 1 & 1 & 0 & \cdots & 0 \\ 0 & 1 & 1 & \cdots & 0 \\ \vdots & \ddots & \ddots & \ddots & \vdots \\ 0 & 0 & \cdots & 1 & 1 \\ \end^ \begin 1\\ 0\\ 0\\ \vdots \\ 0\\ \end
\]矩陣快速冪即可。
參考**
[x] sdoi2008 sue的小球
未來費用提前計算的區間dp。
設 \(f[i][j][0/1]\) 表示處理完區間 \([i,j]\) 之後在左/右端點時的最小代價,最終答案為 \(\sum-\min\\)。
當處理完後在左端點時,可以從 \(f[i+1][j][0/1]\) 轉移過來,即:
\[\min
\begin
f[i+1][j][0]+(s_i+s_n-s_j)(b_.x-b_.x)
\\f[i+1][j][1]+(s_i+s_n-s_j)(b_j.x-b_i.x)
\end
\]在右端點時同理:
\[\min
\begin
f[i][j-1][0]+(s_+s_n-s_)(b_.x-b_.x)
\\f[i][j-1][1]+(s_+s_n-s_)(b_j.x-b_.x)
\end
\]老實說,這類問題的思路基本都是這樣。
參考**
[x] uva1336 修築長城
跟上一題幾乎一毛一樣,注意億下輸出。
參考**
[x] uva1628 送披薩
增加一維表示還需要送的人數,每次轉移時分別往兩邊列舉出乙個點,欽定當前端點到該點的這一段跳過,這樣就可以處理跳過點的情況了。
用記搜實現會比較方便。
參考**
[x] cf1107e vasya and binary string
消消樂問題。
令 \(f[i]\) 表示 \(i\) 個一樣的連在一起的元素被消去後得到的最大分數,可以用完全揹包處理。
然後將連續的一段相同元素合併成乙個點,原序列就變成了若干個黑白交錯的點,記點 \(i\) 中的元素個數為 \(sz[i]\)。
令 \(g[l][r][k]\) 表示現在要消玩 \([l,r]\) 這一段點,其中點 $r $ 後面還吊著 \(k\) 個與 \(r\) 相同的元素,那麼 \(r\) 可以選擇單獨消或者與前面的元素一起消。
單獨消:\(g[l][r-1][0]+f[k+sz[r]]\)。
一起消:\(g[i+1][r-1][0]+g[l][i][k+sz[r]]\),其中 \(i\) 是乙個顏色與 \(r\) 相同的點。
同樣可以記憶化搜尋實現。
參考**
[x] luogup1220 關路燈
又是一道未來費用提前計算的題,方法同上。
參考**
[x] hdu2829 炸鐵路
四邊形優化dp。
令 \(f[i][j]\) 表示前 \(i\) 條鐵路炸成 \(j\) 段的最小花費,則:
\[f[i][j]=\min\
\]\(w[i][j]\) 可以遞推計算:
\[w[i][j]=w[i][j-1]+a[j]\times(sum[j-1]-sum[i-1])
\]其中 \(sum[i]\) 表示字首和。
參考**
[x] cf634c levels and regions
概率期望與dp的結合。
每一關一小時通過概率為 \(\frac^}\),故通過這一關的期望時間為 \(\frac^}\)。
令 \(w(l,r)\) 表示通過 \([l,r]\) 這一段區間中的關的期望時間,那麼:
\[\begin
w(l,r)&=\sum_^}}
\\&=\sum_^}-s_\sum_^}
\end
\]其中 \(s_i\) 表示 \(t\) 的字首和。
將 \(s_i\) 記作 \(s0_i\),將 \(\sum_^}\) 記作 \(s1_i\),\(\sum_^\) 記作 \(s2_i\),那麼:
\[w(l,r)=s1_r-s1_-s0_(s2_r-s2_)
\]令 \(f[i][j]\) 表示前 \(i\) 關分為 \(j\) 個等級的最短期望時間,則:
\[f[i][j]=\min\
\]將 \(w\) 帶入後就可以得到可以斜率優化的式子了。
參考**
[x] icpc2016 wf
最短路+dp。
基本的思路並不難,先處理出總部到各個分部與各個分部到總部的最短路,然後四邊形優化dp即可。但是有一點要注意:在處理出每一點往返總部距離之後應將它們排序之後再dp。
因為每個點對答案的貢獻只與其所在集合大小有關,因此,權值小的點應盡量處在乙個相對較大的集合中,即在所有集合中,最大的那乙個中的點權和應最小,因此要把最小的幾個點放入第乙個(最大的)集合。所以,對點權排序之後可以讓答案最優。
參考**
[x] sp3734 periodni - periodni
笛卡爾樹+dp
對原序列建立笛卡爾樹,節點 \(u\) 的意義就是乙個高度為 \(h[fa]-h[u]\) 的橫著的極大矩形。不難發現,在兩個兒子中放棋子是互不影響的,所以考慮樹形dp。
令 \(f[i][j]\) 表示第 \(i\) 個節點為根的子樹中放了 \(j\) 個棋子的方案數。
先合併左右子樹的答案:
\[f[i][j]=\sum_
\]其中 \(v\) 表示 \(i\) 的兒子。
然後還要求對於 \(i\) 節點表示的矩形中放棋子的方案:
\[f[i][j]=\sum_}
\]其中,\(h,w\) 分別表示長和寬。
參考**
[x] cf939f cutlet
令 \(f[i][j]\) 表示到時間 \(r_i\) 時,現在未烤的那一面烤了 \(j\) 分鐘的方案數,對於時間段 \([l_i,r_i]\) 就會有如下轉移:
需要用單調佇列優化,列舉的是最優決策點 \(r_i-j-k\) 和 \(j-k\),前者隨 \(j\) 的增大而減小,所以要逆推,而後者要順推。
還能用滾動陣列優化掉 \(i\) 那一維。
參考**
學習筆記 概率與期望dp做題總結
之前做的一些就不記錄了,只記錄現在開始做的一些題。t0.入門題 給乙個有向無環圖,每次等概率走某一條邊,求從1走到n的邊權和的期望。做法1,直接設dp x 表示答案,轉移顯然。做法2,考慮從定義入手分析出一種做法。期望的定義是e sigma pi wi,就是wi出現的概率乘上他自己。本題中即answ...
數字DP做題記錄
xdu1161 一本通1588 思路 用二維陣列dp i j 表示數字取到i位的情況下,各位數字之和對題中所給n取模為j的數字個數。例如對於樣例來說,dp 1 0 表示數字最多可取到1位,各個位之和對9取模為0個數字個數,這樣的數字有兩個,即0和9。類似地,dp 1 1 1,因為1 9 1 dp 1...
linux做題筆記
修改linux檔案許可權命令 chmod 檔案或目錄的訪問許可權分為唯讀 r 只寫 w 和可執行 x 三種。橫線代表空許可 ls l命令顯示檔案或者目錄的詳細資訊。rw r r 1 root root 483997 ju1 l5 17 3l sobsrc.tgz 第乙個 表示非目錄檔案,如果是 d ...