<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>插入 DP on Zirnc's Blog</title><link>https://blog.chungzh.cn/blog/%E6%8F%92%E5%85%A5-dp/</link><description>Recent content in 插入 DP on Zirnc's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Fri, 28 Apr 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.chungzh.cn/blog/%E6%8F%92%E5%85%A5-dp/index.xml" rel="self" type="application/rss+xml"/><item><title>ABC209F Deforestation</title><link>https://blog.chungzh.cn/oi-history/abc-209f/</link><pubDate>Fri, 28 Apr 2023 00:00:00 +0000</pubDate><guid>https://blog.chungzh.cn/oi-history/abc-209f/</guid><description>ABC209F Deforestation
题意：给出 $n$ 棵树的高度，砍第 $i$ 棵树的花费是 $h_i+h_{i-1}+h_{i+1}$，求有多少种方案能使得砍完所有树的总代价最小。
砍一棵树的代价只与相邻的树高度有关。下面研究砍 $h_i$ 与 $h_{i+1}$ 的先后顺序对答案的影响。
先砍 $h_i$ 后砍 $h_{i+1}$：$h_i+h_{i-1}+h_{i+1}+h_{i+1}+h_{i+2}$ 先砍 $h_{i+1}$ 后砍 $h_i$：$h_{i+1}+h_i+h_{i+2}+h_i+h_{i-1}$ 作差后得到：$h_{i+1}-h_i$。当 $h_{i+1}&amp;gt;h_i$ 时，应该先砍 $h_{i+1}$。当 $h_{i+1}&amp;lt;h_i$ 时，应该先砍 $h_i$。因此，对于相邻的两棵树，先砍高的那棵最优。
插入 DP（insertion DP）：先考虑排好前 $i-1$ 个数，再往中间插入第 $i$ 个数。
令 $\mathit{f}_{i,j}$ 表示排好了前 $i$ 棵树的砍树次序，且第 $i$ 棵树排在第 $j$ 位，得到最小代价的方案数。
当 $h_{i+1} &amp;gt; h_i$ 时，应先砍 $i+1$，那么 $\mathit{f}{i+1,j} = \sum{k=j}^{i}\mathit{f}_{i,k}$
当 $h_i &amp;gt; h_{i+1}$ 时，应先砍 $i$，那么 $\mathit{f}{i+1,j} = \sum{k=1}^{j-1}\mathit{f}_{i,k}$
当 $h_i = h_{i+1}$ 时，砍哪棵都可以，$\mathit{f}{i+1,j} = \sum{k=1}^i\mathit{f}_{i,k}$</description></item></channel></rss>