首页 > 其他分享 >dp专题总结 - AtCoder DP Contest

dp专题总结 - AtCoder DP Contest

时间:2024-11-01 12:19:56浏览次数:6  
标签:AtCoder Contest max sum leftarrow leq fi dp

dp 专题总结

题单: t h i s   w a y   s i r this\ way\ sir this way sir

来自于ATcoder的一次 dp 专题比赛。

Coins

设 f i , j f_{i,j} fi,j​ 为 考虑前 i i i 个硬币,正面向上的个数有 j j j 个 的概率。

有转移:
f i , 0 ← f i − 1 , 0 × ( 1 − p i ) f i , j ← f i − 1 , j × ( 1 − p i ) + f i − 1 , j − 1 × p i f_{i,0} \leftarrow f_{i - 1,0} \times (1 - p_i) \\ f_{i,j} \leftarrow f_{i - 1,j} \times (1 - p_i) + f_{i - 1,j - 1} \times p_i fi,0​←fi−1,0​×(1−pi​)fi,j​←fi−1,j​×(1−pi​)+fi−1,j−1​×pi​

然后将 ∑ i = n / 2 + 1 n f n , i \sum_{i = n / 2 + 1}^n f_{n,i} ∑i=n/2+1n​fn,i​ 输出即可。

Sushi

很轻松可以设出 f i , j , k , p f_{i,j,k,p} fi,j,k,p​ 盘子数量的四维状态,但题目只能开三维。

发现 i + j + k + p = n i + j + k + p = n i+j+k+p=n 所以用 n − j − k − p n - j - k - p n−j−k−p 来表示 i i i,

然后算概率就可以了。

Candies

设 f i , j f_{i,j} fi,j​ 为第 i i i 个人,用了 j j j 颗糖果。

有转移:
f i , j ← ∑ k = j − a [ i ] j f i − 1 , k f_{i,j} \leftarrow \sum_{k = j - a[i]}^{j} f_{i - 1,k} fi,j​←k=j−a[i]∑j​fi−1,k​

考虑前缀和优化。

f i , j ← s j − s j − a [ i ] − 1 f_{i,j} \leftarrow s_j - s_{j - a[i] - 1} fi,j​←sj​−sj−a[i]−1​

Independent Set

树上 d p dp dp

求独立集, f x , 0 = ∏ y ∈ subtree ⁡ x ( f y , 0 + f y , 1 ) , f x , 1 = ∏ y ∈ subtree ⁡ x f y , 0 f_{x,0} = \prod_{y \in \operatorname{subtree}_x}(f_{y,0} + f_{y,1}),f_{x,1} = \prod_{y \in \operatorname{subtree}_x} f_{y,0} fx,0​=∏y∈subtreex​​(fy,0​+fy,1​),fx,1​=∏y∈subtreex​​fy,0​

Flowers

最长上升子序列 的 BIT 优化。

Walk

矩阵快速幂即可。

Permutation

不考虑具体大小,只考虑相对大小,有转移:
f i = { ∑ j < i f j ( o p i = 0 ) ∑ j > i n f j ( o p i = 1 ) f_{i} = \begin{cases} \sum_{j < i} f_{j} & (op_i = 0) \\ \sum_{j > i}^n f_{j} & (op_i = 1) \\ \end{cases} fi​={∑j<i​fj​∑j>in​fj​​(opi​=0)(opi​=1)​

套上前缀和优化。

Grouping

先状压出每一个物品在连其他的物品可能产生的贡献。

然后状压出每种分组的值,最后将每个状态的值通过枚举子集求最优解。

Intervals

梦回天天爱打卡。

定义 f i f_i fi​ 为枚举到 i i i 时的答案。

有转移,
f i ← max ⁡ ( f j + ∑ j ≤ l k ≤ i ≤ r k w ( k ) ) f_{i} \leftarrow \max(f_{j} + \sum_{j \leq l_k \leq i \leq r_k} w(k)) \\ fi​←max(fj​+j≤lk​≤i≤rk​∑​w(k))

然后发现,我们优化不了。

考虑转换状态,定义 f i f_i fi​ 为枚举到 i i i 且 所有区间右端点 ≤ i \leq i ≤i 时的答案。

那么,我们只需要在转移时,遇到区间右端点时,在线段树上区间加上权值即可。

Tower

发现 s i − w j < s j − w i s_i - w_j < s_j - w_i si​−wj​<sj​−wi​ 时,选择 j j j 显然更优。

变形 s i + w i < s j + w j s_i + w_i < s_j + w_j si​+wi​<sj​+wj​。

按 s i + w i s_i + w_i si​+wi​ 排序,跑 01 01 01 背包

Frog 3

斜率优化板题

有转移:
f i = max ⁡ j < i ( f j + ( h i − h j ) 2 + c ) f_{i} = \max_{j < i}(f_{j} + (h_i - h_j)^2 + c) fi​=j<imax​(fj​+(hi​−hj​)2+c)

对于最优决策点 j j j,有
f i = f j + ( h i 2 − 2 h i h j + h j 2 ) + c f_{i} = f_j + (h_i^2 - 2h_ih_j + h_j^2) + c \\ fi​=fj​+(hi2​−2hi​hj​+hj2​)+c
f j + h j 2 = 2 h i h j − c + f i + h i 2 f_j + h_j^2 = 2h_ih_j - c + f_i + h_i^2 fj​+hj2​=2hi​hj​−c+fi​+hi2​

那么, k = 2 h i , b = f i + h i 2 − c k = 2h_i,b = f_i + h_i^2 - c k=2hi​,b=fi​+hi2​−c

h i h_i hi​ 单调,直接上单调队列。

Grid 2

定义 f i f_i fi​ 为 仅经过 ( x i , y i ) (x_i,y_i) (xi​,yi​) (此为障碍) 的所有路线。

有转移:
f i = ( x i + y i − 2 x i − 1 ) − ∑ j < i f j ( x i − x j + y i − y j x i − x j ) f_i = \dbinom{x_i + y_i - 2}{x_i - 1} - \sum_{j < i} f_{j}\dbinom{x_i - x_j + y_i - y_j}{x_i - x_j} fi​=(xi​−1xi​+yi​−2​)−j<i∑​fj​(xi​−xj​xi​−xj​+yi​−yj​​)

然后将 ( h , w ) (h,w) (h,w) 视为最后一个障碍, f n + 1 f_{n + 1} fn+1​ 就是答案。

标签:AtCoder,Contest,max,sum,leftarrow,leq,fi,dp
From: https://blog.csdn.net/qq_49785217/article/details/143403647

相关文章

  • COCI 17/18 Contest 6 Vrtić
    傻逼题。首先经典的结论是有很多个环,让每个环最小。显然将数组从小到大排序,然后每个环都是取连续一段一定最优,交换法容易证明。然后对于每个环内如何最优呢?假设我们有从小到大排序的数组\(a_{\{1,n\}}\),最优一定是这样的:\[a_1,a_3,a_5,a_7...a_8,a_6,a_4,a_2\]就是左右填......
  • DPaRL:耶鲁+AWS出品,开放世界持续学习场景的新解法 | ECCV'24
    来源:晓飞的算法工程笔记公众号,转载请注明出处论文:Open-WorldDynamicPromptandContinualVisualRepresentationLearning论文地址:https://arxiv.org/abs/2409.05312创新点在开放世界中建立了一种新的持续视觉表征学习的实用设置。提出了一种简单而强大的方法,动......
  • 基于AFDPF主动频率偏移法的孤岛检测Simulink仿真
    1.课题概述基于AFDPF主动频率偏移法的孤岛检测Simulink仿真。 2.系统仿真结果   3.核心程序与模型版本:MATLAB2022a   4.系统原理简介       在分布式发电系统中,孤岛现象是指电网发生故障时,局部区域内的分布式电源与负荷形成独立运行的微网,这种状......
  • 常用的DPDK命令和工具
    dpdk-devbind.py:用于绑定和解绑网络设备与DPDK驱动程序。示例:./dpdk-devbind.py--bind=igb_uio<NIC> 绑定网络接口卡(NIC)。dpdk-pktgen:一个高性能的网络流量生成器。示例:./pktgen-c0x1-n4----portmask=0x1 生成流量。dpdk-testpmd:测试和调试DPDK的网络性能......
  • [SCOI2014] 方伯伯的玉米田(树状数组优化 DP)
     loj传送门https://loj.ac/p/2211洛谷题目传送门https://www.luogu.com.cn/problem/P3287解题思路首先,我们可以贪心地思考一下:对于每一次区间的加一操作,右端点是在末尾会比右端点在中间的情况更好。因为,当你的右端点在序列中间的时候,相对之下,后面的数就更小了一些,这样是......
  • 决策单调性优化 DP
    前言本文将介绍决策单调性优化DP的相关内容。持续更新修正,如有差错请指出。1.四边形不等式优化1.1四边形不等式与决策单调性四边形不等式:如果对于任意的\(a\leb\lec\led\)均成立\[w(a,d)+w(b,c)\gew(a,c)+w(b,d)\]则称代价函数\(w\)满足四边形不等式。......
  • 线程池ThreadPoolExecutor配合callable获得线程执行结果
    此处记录使用callable创建线程,使用线程池执行,看下是否有进行线程复用并且FutureTask返回结果线程创建publicclassMyCallableBakeUserimplementsCallable<String>{privateinta;publicMyCallableBakeUser(inta){this.a=a;}@Overrid......
  • 使用ThreadPoolExecutor线程池消化线程执行代码
    此处记录一个使用ThreadPoolExecutor线程池的demo线程代码publicclassExcutorRunnableimplementsRunnable{@Overridepublicvoidrun(){System.out.println(Thread.currentThread().getName()+":线程执行666");try{Thread.......
  • TCP和UDP
    TCP(传输控制协议)连接导向:在数据传输之前,TCP需要建立连接(如三次握手),确保双方可以通信。可靠性:TCP提供数据传输的可靠性,确保数据包按顺序到达,且没有丢失。丢失的数据包会被重传。流量控制和拥塞控制:TCP具有流量控制机制,防止发送方过快发送数据,导致接收方处理不过来。同时,它也会根......
  • ​Leetcode 166.珠宝的最高价值​ 网格图dp C++实现
    问题:Leetcode166.珠宝的最高价值现有一个记作二维矩阵 frame 的珠宝架,其中 frame[i][j] 为该位置珠宝的价值。拿取珠宝的规则为:只能从架子的左上角开始拿珠宝每次可以移动到右侧或下侧的相邻位置到达珠宝架子的右下角时,停止拿取注意:珠宝的价值都是大于0的。除非这个......