【galgame鉴赏】Wonderful Everyday

我写了一篇观后感 , 但是这个博客太小了 , 写不下来 , 所以就来讲讲斜率优化 \(DP\)

本文参照了这个文章

0x00 背景

芝士一道模板题

0x01 题解?

首先我们把 \(c_i\)\(L\) 都加上 1 , 这样就不用考虑计算式子中加一减一之类的东西了
然后在求出关于\(c_i\)的前缀和\(s[i]\)
我们设\(f[i]\)为把物品 \(i\) 选上的最小价值
转移方程不难想\(f[i]=min(f[j]+(s[i]-s[j]-L)^2 )\) \((j<i)\)
显然我们这样转移的话时间是\(O(n^2)\)的 , 所以我们要想办法去优化

0x10 斜率优化

0x11 准备

为了方便 , 我们把转移方程中的\(min\)弄掉 , 就变成

\(f[i]=f[j]+(s[i]-L)^2+s[j]^2-2(s[i]-L)s[j]\)

我们发现式子右边关于\(i\)的东西都是定的 , 不妨把关于 \(i\)\(j\) 的东西分开

\(f[i]=(-2s[i]s[j])+(dp[j]+(s[j]+L)^2)+(S[i]^2−2S[i]L)\)

0x12 继续准备

\(j_1\) , \(j_2\) 为两个决策点\((j_1<j_2)\) , 且 \(j_2\) 优于 \(j_1\) , 那么有

\((-2s[i]s[j_1])+(dp[j_1]+(s[j_1]+L)^2)+(S[i]^2−2S[i]L) \ge (-2s[i]s[j_2])+(dp[j_2]+(s[j_2]+L)^2)+(S[i]^2−2S[i]L)\)

对上面的式子进行分参 , 把关于\(j\)的项看作参 , 关于 \(i\) 的看作变

\(−2s[i](s[j_2]−s[j_1])\ge (f[j_1]+(s[j_1]+L)^2)−(f[j_2]+(s[j_2]+L)^2)\)

\(\because s 是单调递增的\)

\(\therefore s[j_2]>s[j_1]\)

最后可以得到

\(2s[i]\ge \frac{(f[j_2]+(s[j_2]+L)^2)−(f[j_1]+(s[j_1]+L)^2)}{s[j_2]−s[j_1]}\)

我们令\(X(i)=s[i] , Y(i)=f[i]+(s[i]+L)^2\),最后将上式写成

\(2s[i]\ge \frac{Y(j_2)-Y(j_1)}{X(j_2)-X(j_1)}\)

我们可以把右边看成是关于点 \(j_2\)\(j_1\) 的斜率式子 , 两个点分别是\((X(j_1),Y(j_1))\)\((X(j_2),Y(j_2))\)

posted @ 2022-11-16 15:06  羊扬羊  阅读(60)  评论(0编辑  收藏  举报