动态规划杂题选记

1.P3092 [USACO13NOV]No Change G

简单状压,\(f[S]\) 表示当前状态为 \(S\) 能够购买的最远商品编号。

转移时二分当前的硬币最远能够买到哪里。

\(f[S]=n\) 时统计答案。

2.P3126 [USACO15OPEN]Palindromic Paths G

数字三角形模型,可以记 \(f[k][i][j]\) 表示总步数为 \(k\),左上角的人横坐标为 \(i\),右下角为 \(n-j\) 的路径数量。

转移就从两个人的两种方向转移就好。

发现 \(k\) 只从 \(k-1\) 转移,可以滚掉。

是回文串当且仅当两者重合,即 \(f[i][i]\)。加强版记得判断 \(n+m\) 的奇偶性。

3.P1437 [HNOI2004]敲砖块

转移是从上一层的后一块砖来的,所以我们考虑倒序枚举转移。

\(f[i][j][k]\) 表示当前敲到了第 \(i\) 列第 \(j\) 行,共敲了 \(k\) 块砖的最大收益。

那么转移有:

\[f[i][j][k]=\max_{l\in[j-1,n-i]}(f[i+1][l][k-j]+\sum_{p=1}^ja[p][i]) \]

因为当前列 \([1,j]\) 的砖都要敲完,可以维护一个前缀和 \(O(1)\) 做。

同时保证上一列至少敲到 \(j-1\),这列可以敲 \(j\) 就可以了。

4.P6564 [POI2007] 堆积木KLO

比较巧妙的状态设计及优化。

直接给出:\(f[i]\) 表示强制让 \(i\) 归位的最大价值,那么可以枚举一个 \(j\),保证 \(j\)\(i\) 都归位。

\[f[i]=\max(f[j])+1 \]

其中 \(j\) 满足 \(j<i\)\(a[i]>a[j]\)\(a[i]-a[j]\leqslant i-j\)

那么这看起来很三维偏序,cdq?

但仔细一想,\(i-a[i]\geqslant j-a[j]\),再保证了 \(a[i]>a[j]\) ,第一维就自然满足了。

这就变成了二维偏序,树状数组即可。

posted @ 2020-11-03 20:30  Alansp  阅读(101)  评论(0编辑  收藏  举报