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_{lin[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]) ,第一维就自然满足了。
这就变成了二维偏序,树状数组即可。