DP做題筆記

2022-03-06 12:53:23 字數 4465 閱讀 7648

一些部落格

乙個比較完整的總結

帶權二分

決策單調性

未來費用區間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 ...