AtCoder DP系列刷题记录

yizhixiaoyun / 2023-05-11 / 原文

直面自己的弱点。

A Frog 1

简单线性 \(\text{dp}\),令 \(dp_i\) 为跳到第 \(i\) 块石头的最小花费,易得:

\[dp_i+=\min(|a_i-a_{i-1}|,|a_i-a_{i-2}|) \]

B Frog 2

很快就写完了,但是一直调了十分钟,耻辱啊。

如果反着跳,第 \(i\) 根木桩只能从第 \(i+1\)\(i+2\) 木桩上跳到,则有:

\[dp_i=\min(dp_{i+1}+|a_i-a_{i+1}|,dp_{i+2}+|a_i-a_{i+2}|) \]

C Vacation

语文课花两分钟想出来的。

显然对于 \(a_i\),它只能接受 \(b_{i-1}\)\(c_{i-1}\) 的转移,其他两边情况相同,则有:

\[dp_{i,0}=\max(dp_{i-1,1},dp_{i-1,2})+a_i \]

\[dp_{i,1}=\max(dp_{i-1,0},dp_{i-1,2})+b_i \]

\[dp_{i,2}=\max(dp_{i-1,0},dp_{i-1,1})+c_i \]

D Knapsack 1

\(01\) 背包板子,不讲了。

E Knapsack 2

\(01\) 背包基本一致,但数据范围大了很多,将 \(\text{dp}\) 数组表示的东西换一下就行了,不表示价值,表示重量。像 \(01\) 背包一样压维,则有:

\[dp_j=\min(dp_j,dp_{j-v_i}+w_i) \]

F LCS