Atcoder Educational DP Contest 做题记录

E

思路

\(W\) 大范围,\(SumV\) 小范围的背包,令 \(f[i]\) 表示价值为 \(i\) 时最小容量,转移方程 \(f[j]=\min(f_j,f_{j-v_i}+w_i)\)

F

反思

输出方案数的话, \(dp\) 时记录该状态时从哪里转移来的,最后从末状态递归输出。

I

思路

\(n \le 3000\),考虑二维 \(dp\),每次加入一个新硬币来遍历一遍。令 \(f_{i,j}\) 表示前 \(i\) 个 硬币时有 \(j\) 个正面朝上,则最终答案为 $$\sum\limits_{i=n/2+1} ^nf_{n,i} $$
此时遍历至 \(f_{i,j}\),对于 \(i\),有正反两种情况。

  • 硬币 \(i\) 为正,则上一个硬币时已有 \(j\) 个向上,贡献为 \(f_{i-1,j}*(1-p[i])\)
  • 硬币 \(i\) 为反,则上一个硬币时有 \(j-1\) 个向上,贡献为 \(f_{i-1,j-1}*p[i]\)

综上,转移方程 \(f_{i,j}=f_{i-1,j}*(1-p[i])+f_{i-1,j-1}*p[i]\)

关于边界,\(f_{0,0}\) 初始为 \(1\) ,代表一个都不扔时,没有硬币朝上是必然事件。

J

思路

吃完所有寿司总共需要 \(\sum\limits_{i=1}^na_i\) 次,于是可以拆分成这么多个状态。
正常的做法是令 \(f_i\) 表示已吃 \(i\) 个寿司时距离吃完的期望步数。此时对这一步选的这个盘子,如果它当前剩下一个寿司,两个寿司……,下一步时的盘子情况是不同的(例如 2 1 可以吃一次后可以是 1 1 或 2 0,这两种状态的期望步数是不同的),所以每个不同的状态需要单独考虑,那么
但是这样有些状态会重复考虑,

posted @ 2025-09-24 21:59  Sqqqz185  阅读(5)  评论(0)    收藏  举报