Logo S08577 的博客

博客

AT_dp

...
S08577
2025-12-01 12:57:33

本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2025-10-14 17:04:49

A/B

题目

A是B中k=2的特殊情况。

设 $f_i$ 表示跳到第 $i$ 个台阶的最小代价。

首先,在第 $i$ 个台阶我们可以从 $i-1,i-2,....,i-k$ 转移过来。

不难列出转移方程

$$f_i=\min_{j=\max(1,i-k)}^{i} f_j+|h_i-h_j|$$

$dp_1=0$

C

不难想到状态,设 $f_{i,1/2/3}$ 表示第 $i$ 天选择第 $1/2/3$ 种活动可获得的最大总幸福度。

很好转移。

$$f_{i,1}=a_i+\max(f_{i-1,2},f_{i-1,3})$$ $$f_{i,2}=b_i+\max(f_{i-1,1},f_{i-1,3})$$ $$f_{i,3}=c_i+\max(f_{i-1,2},f_{i-1,1})$$

答案即为 $\max(f_{n,1/2/3})$

D

简单背包

设 $f_i$ 表示背包容量为 $i$ 的时候最大价值。

转移 $$f_j=\max(f_j,f_{j-w_i}+v_i)$$

输出 $f_m$ 即可。

E

最大范围为 $10^9$,D的状态不再适合此题。

可以将价值和重量交换

设 $f_i$ 表示取价值为 $i$ 的物品的最小重量。

不难转移 $$f_j=\max(f_j,f_{j-v_i}+w_i)$$

答案只需要统计最大的价值使得其重量符合题目要求即可。

F

最长公共子序列。

设 $f_{i,j}$ 为 $s$ 的前 $i$ 项与 $t$ 的前 $j$ 项的LCS长度。

若 $s_i=t_j$,则 $f_{i,j}=f_{i-1,j-1}+1$

否则,则 $f_{i,j}=\max(f_{i-1,j},f_{i,j-1})$

输出 $f_{s.size(),t.size()}$

G

给定一个dag,求最长路。

$f_i$ 表示遍历到第 $i$ 个点的最长路。

若有一条边 $j \to i$,那么 $f_i=\max(f_i,f_j+1)$

dfs即可。

H

设 $f_{i,j}$ 表示走到 $(i,j)$ 这个点。

类似金字塔转移即可。

I

设 $f_{i,j}$ 表示到第 $i$ 个硬币有 $j$ 个向上的概率。

不难转移 $$f_{i,j}=f_{i-1,j-1} \times p_i +f_{i-1,j} \times (1-p_i)$$

输出 $\sum_{j>n-j} f_{n,j}$ 即可。

评论

暂无评论

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。