首页 > 其他分享 >AT_dp 26 题

AT_dp 26 题

时间:2024-02-02 11:26:59浏览次数:46  
标签:表示 26 dfrac sum max cases dp

AT_dp 26 题

A.Frog 1

直接 dp。设 \(f_i\) 表示调到石头 \(i\) 的最小费用,则有

\[f_i=\min(f_{i-1}+\left|a_i-a_{i-1}\right|,f_{i-2}+\left|a_i-a_{i-2}\right|) \]

B.Frog 2

上一题的升级版,同样设 \(f_i\) 表示调到石头 \(i\) 的最小费用,则有

\[f_i=\min_{j=i-k}^{i-1}f_j+\left|a_i-a_j\right| \]

C.Vacation

设 \(f_{i,0/1/2}\) 表示第 \(i\) 天游泳/捉虫/写作业能获得的最大幸福值,则有

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

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

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

D.Knapsack 1

01 背包。设 \(f_{i,j}\) 表示前 \(i\) 个物品组成体积为 \(j\) 的背包的最大价值,则有

\[f_{i,j}=\max(f_{i-1,j},f_{i-1,j-w_i}+v_i) \]

可以将 \(i\) 这一维去掉,则变为

\[f_j=\max(f_j,f_{j-w_i}+v_i) \]

注意:\(j\) 要反向枚举,因为我们在更新 \(f_j\) 的时候是用的是原本的 \(f_{j-w_i}\)。

E.Knapsack 2

设 \(f_{i,j}\) 表示前 \(i\) 个物品组成价值为 \(j\) 的背包的最小体积,则有

\[f_{i,j}=\min(f_{i-1,j},f_{i-1,j-v_i}+w_i) \]

可以将 \(i\) 这一维去掉,则变为

\[f_j=\max(f_j,f_{j-w_i}+v_i) \]

同上,\(j\) 也要反向枚举。

F.LCS

设 \(f_{i,j}\) 表示字符串 \(s\) 的前 \(i\) 位和字符串 \(t\) 的前 \(j\) 位的最长公共子序列长度,则有

\[f_{i,j}= \begin{cases} \max(f_{i-1,j},f_{i,j-1},f_{i-1,j-1}+1),&s_i=t_j\\ \max(f_{i-1,j},f_{i,j-1}),&\text{otherwise}\\ \end{cases} \]

现在还要求出最长公共子序列,于是可以从 \(f_{n,m}\) 倒推回 \(f_{1,1}\),并记录最长公共子序列。

G.Longest Path

DAG 上求最长路。设 \(f_i\) 表示到点 \(i\) 的最长路,则有

\[f_v=\min_{u\to v}(f_{u}+1) \]

H.Grid 1

设 \(f_{i,j}\) 表示到位置 \((i,j)\) 的方案数,则有

\[f_{i,j}= \begin{cases} 0,&s_{i-1,j}=s_{i,j-1}\not=\text{.}\\ f_{i-1,j},&s_{i,j-1}\not=\text{.}\\ f_{i,j-1},&s_{i,j-1}\not=\text{.}\\ f_{i-1,j}+f_{i,j-1},&\text{otherwise} \end{cases} \]

I.Coins

设 \(f_{i,j}\) 表示前 \(i\) 个硬币,有 \(j\) 个朝上的概率,则有

\[f_{i,j}=f_{i-1,j}\times(1-p_i)+f_{i-1,j-1}\times p_i \]

可以将 \(i\) 这一维去掉,则变为

\[f_j=f_j\times(1-p_i)+f_{j-1}\times p_i \]

同理,\(j\) 也要反向枚举。

J.Sushi

先考虑倒推。

设 \(f_{i,j,k,l}\) 表示剩0/1/2/3个寿司的盘子有 \(i/j/k/l\) 个,变成输入状态所需的期望步数,则有,

\[f_{i,j,k,l}=1+\dfrac{i}{n}f_{i,j,k,l}+\dfrac{j}{n}f_{i+1,j-1,k,l}+\dfrac{k}{n}f_{i,j+1,k-1,l}+\dfrac{l}{n}f_{i,j,k+1,l-1} \]

整理得:

\[\dfrac{n-i}{n}f_{i,j,k,l}=1+\dfrac{j}{n}f_{i+1,j-1,k,l}+\dfrac{k}{n}f_{i,j+1,k-1,l}+\dfrac{l}{n}f_{i,j,k+1,l-1} \]

\[f_{i,j,k,l}=\dfrac{n}{n-i}+\dfrac{j}{n-i}f_{i+1,j-1,k,l}+\dfrac{k}{n-i}f_{i,j+1,k-1,l}+\dfrac{l}{n-i}f_{i,j,k+1,l-1} \]

因为 \(i+j+k+l=n\),所以可以将 \(i\) 的一维去掉,则有

\[f_{j,k,l}=\dfrac{n}{j+k+l}+\dfrac{j}{j+k+l}f_{j-1,k,l}+\dfrac{k}{j+k+l}f_{j+1,k-1,l}+\dfrac{l}{j+k+l}f_{j,k+1,l-1} \]

K.Stones

设 \(f_i\) 表示有 \(i\) 个石头时是否有必胜策略,则有

\[f_{i}= \begin{cases} 1,&\exists j\le n,f_{i-a_j}=0\\ 0,&\text{otherwise} \end{cases} \]

L.Deque

区间 dp。设 \(f_{l,r}\) 表示剩余 \(l\) 到 \(r\) 之间的数的最大差值,则分为两种情况:

  1. \((n-len)\bmod2=0\),即太郎先手,则有

    \[f_{l,r}=\max(f_{l+1,r}+a_l,f_{l,r-1}+a_r) \]

  2. \((n-len)\bmod2=1\),即次郎先手,则有

    \[f_{l,r}=\min(f_{l+1,r}-a_l,f_{l,r-1}-a_r) \]

M.Candies

设 \(f_{i,j}\) 表示前 \(i\) 个人分 \(j\) 个糖果的方案数,则有

\[f_{i,j}=\sum_{k=0}^{\min(a_i,j)}f_{i-1,j-k} \]

然后可以利用前缀和预处理出

\[sum_{i,j}=\sum_{k=0}^jf_{i,k} \]

则可以优化为

\[f_{i,j}=sum_{i-1,j}-sum_{i-1,j-\min(a_i,j)} \]

N.Slimes

区间 dp。设 \(f_{l,r}\) 表示区间 \(l\) 到 \(r\) 之间合并的最小代价,则有

\[f_{l,r}=\min (f_{l,k}+f_{k+1,r})+\sum_{i=l}^ra_i \]

O.Matching

状压 dp。设 \(f_{i,s}\) 表示前 \(i\) 个男性和女性集合中状态为 \(s\) 的匹配,转移枚举第 \(i\) 个男性与哪一个女性匹配,则有

\[f_{i,s}=\sum_{j\in s}f_{i-1,s-j} \]

P.Independent Set

树形 dp。设 \(f_{i,0/1}\) 表示第 \(i\) 个节点染成白/黑色,子树内的染色方案,则有

\[f_{i,0}=\prod_{j\in son_i}f_{j,0}+f_{j,1} \]

\[f_{i,1}=\prod_{j\in son_i}f_{j,0} \]

Q.Flowers

设 \(f_i\) 表示以 \(i\) 结尾的最大权值和,则有

\[f_i=\max_{j<i,h_j<h_i}f_j+a_i \]

可以用权值树状数组优化,设树状数组的 \(t_i\) 表示满足 \(h_j=i\) 的最大的 \(f_j\) 即可。

R.Walk

设 \(f_{i, j, t}\) 表示从 \(i\) 到 \(j\) 的路径中长度为 \(t\) 的路径条数,则有

\[f_{i,j,t}=\sum f_{i,k,t-1}\times f_{k,j,1} \]

然后发现它类似于矩乘的式子,则可以用矩乘优化。设 \(f_t\) 表示长度为 \(t\) 时的矩阵,则有

\[f_t=f_{t-1}\times f_1=f_1^t \]

S.Digit Sum

设 \(f_{i,j}\) 表示前 \(i\) 位在任意填的情况下,模 \(m\) 的值为 \(j\) 的方案数,则有

\[f_{i,j}=\sum f_{i-1,(j-k)\bmod m} \]

然后设 \(g_{i,j}\) 表示前 \(i\) 位填数不能超过 \(n\) 的情况下,模 \(m\) 的值为 \(j\) 的方案数,则有

\[g_{i,j}=g_{i-1,(j-num_i)\bmod m}+\sum_{k<num_i}f_{i-1,(j-k)\bmod m} \]

T.Permutation

设 \(f_{i,j}\) 表示填充前 \(i\) 位,且第 \(i\) 位上的数为 \(j\) 的方案数,则有

\[f_{i,j}= \begin{cases} \sum_{k<i}f_{i-1,k},&s_i=\text{<}\\ \sum_{k>i}f_{i-1,k},&s_i=\text{>}\\ \end{cases} \]

然后前缀和优化即可。

U.Grouping

设 \(f_s\) 表示集合为 \(s\) 的物品分组的最大得分,则可以分成两个集合转移,或直接计算,即

\[f_{s}=\max_{t\subset s}f_t+f_{s-t} \]

V.Subtree

假设当前的根为 \(rt\),那么可以设 \(f_i\) 表示 \(i\) 的子树内 \(i\) 为黑色的黑色连通块方案数,则有

\[f_i=\prod_{j\in son_i}(f_j+1) \]

所以 \(rt\) 的答案为 \(f_{rt}\)。但若对于每个点都这么做,会达到 \(O(n^2)\) 的时间复杂度,所以考虑换根 dp。

假设当前已经求出 \(i\) 的父亲 \(fa\) 的答案为 \(g_{fa}\),则有

\[g_i=f_i\times\dfrac{g_{fa}}{f_i+1} \]

其中 \(g_i\) 为 \(i\) 的答案。

但是因为有模数,所以不能用除法,要预处理前缀积与后缀积,然后直接相乘。

W.Intervals

设 \(f_{i,j}\) 表示前 \(i\) 个位置,最后一个 1 在 \(j\) 位置的最大分数,则有

\[f_{i,j}= \begin{cases} f_{i-1,j}+\sum_{l_k\le j,r_k=i}a_k,&j<i\\ \max f_{i-1,k},&j=i \end{cases} \]

观察到有很多 \(f\) 之的更新都用到了同一个命令,而且我们发现每一个命令影响的是一个区间,所以我们可以将 \(f\) 值丢到线段树上,然后进行区间加。

而对于 \(i=j\) 的更新时在 \([1,i-1]\) 中取最大值,所以还要进行额外更新。注意到 \(i\) 及其后面的尚未更新,所以可以调用全局最大值。

X.Tower

一眼背包。先排序,若 \(i\) 要在 \(j\) 的上方,则把 \(i\) 放在 \(j\) 的上方的剩余空间要大于把 \(j\) 放在 \(i\) 的上方的剩余空间,则 \(s_j-w_i>s_i-w_j\)。移项得,\(s_i+w_i<s_j+w_j\)。

设 \(f_{i,j}\) 表示前 \(i\) 个箱子,重量和为 \(j\) 的最大价值,则有

\[f_{i,j}=\max(f_{i-1,j},f_{i-1,j-w_i}+v_i) \]

将 \(i\) 这一维去掉后,则有

\[f_j=\max(f_j,f_{j-w_i}+v_i) \]

易得 \(j\) 也要反向枚举。

但重量和是 \(10^7\) 级别的,仍需优化。

可以发现重量和一定会小于等于 \(s_i+w_i\),所以可以优化为 \(10^4\) 级别。

Y.Grid 2

首先,易得从 \((x_1,y_1)\) 到 \((x_2,y_2)\) 的路径方案数为 \(\binom{x_1+y_1-x_2-y_2}{x_1-x_2}\)。

设 \(f_i\) 表示到达第 \(i\) 个障碍,且不经过其他障碍的方案数,则有

\[f_i=\binom{x_i+y_i-2}{x_i-1}-\sum f_j\times\binom{x_i+y_i-x_j-y_j}{x_i-x_j} \]

如果把点 \((h,w)\) 看做第 \(n+1\) 个障碍,则答案就为 \(f_{n+1}\)。

Z.Frog 3

设 \(f_i\) 表示跳到石头 \(i\) 的最小花费,则有

\[f_i=\min (f_j+(h_i-h_j)^2+C) \]

暴力拆平方得

\[f_i=f_j+h_i^2-2h_ih_j+h_j^2+C \]

整理得

\[f_j+h_j^2=2h_ih_j+f_i-C \]

现在想要让截距最小,所以可以对点 \((h_j,f_j+h_j^2)\) 维护下凸壳。

标签:表示,26,dfrac,sum,max,cases,dp
From: https://www.cnblogs.com/liuir/p/18002803

相关文章

  • WordPress 技巧:解决 3.6 版本的 "wpdb::escape is deprecated" 错误提示
    来源:http://www.shanhubei.com/archives/13621.html升级到WordPress3.6之后,发现在debuglog中有很多以下的错误信息:Notice:wpdb::escapeisdeprecatedsinceversion3.6!Usewpdb::prepare()oresc_sql()instead.这个错误信息的意思是WordPress3.6将$wpdp类......
  • SpringBoot利用ThreadPoolTaskExecutor批量插入百万级数据实测!
    开发目的: 提高百万级数据插入效率。采取方案: 利用ThreadPoolTaskExecutor多线程批量插入。采用技术: springboot2.1.1+mybatisPlus3.0.6+swagger2.5.0+Lombok1.18.4+postgresql+ThreadPoolTaskExecutor等。application-dev.properties添加线程池配置信息#异步线程配置#配置核......
  • ajax与action,WordPress主题开发之wp_ajax_{$action}和wp_ajax_nopriv_{$action}的区
    wp_ajax_{$action}和wp_ajax_nopriv_{$action}是WordPress主题开发常用的函数,这两个函数经常用在ajax交互功能上。例如ajax表单登录,ajax提交表单等。本篇文章主要讲述了wp_ajax_{$action}和wp_ajax_nopriv_{$action}之间的区别。WordPress中AJAX请求方式在说wp_ajax_{$action}......
  • P4426 毒瘤笔记
    前置知识点:虚树,dp。题意给定一个\(n\)个点\(m\)条边的无向简单联通图,满足\(n-1\lem\len+10\)。求图的独立集个数,对\(998244353\)取模。题解首先,注意到\(m\len+10\),也就是说非树边只有最多\(11\)条。将这些非树边连接的\(s=22\)个点(下面称为关键点)找......
  • fastjson 1268-jdbc
    1268-jdbc复现靶场项目是https://github.com/lemono0/FastJsonParty版本{"@type":"java.lang.AutoCloseable"回包:{"timestamp":"2024-01-31T09:45:27.342+0000","status":500,"error":"InternalS......
  • csharp 远程桌面登录 mstsc rdp文件
    RemoteDesktopConnection\src\LogInfo.csnamespaceRDP{classLogInfo{publicstringIpaddress{get;set;}publicstringUsername{get;set;}publicstringPassword{get;set;}}}RemoteDesktopConnection\src......
  • LLM面面观之RLHF平替算法DPO
    1.背景最近本qiang~老看到一些关于大语言模型的DPO、RLHF算法,但都有些云里雾里,因此静下心来收集资料、研读论文,并执行了下开源代码,以便加深印象。此文是本qiang~针对大语言模型的DPO算法的整理,包括原理、流程及部分源码。2.DPOvsRLHF  上图左边是RLHF算法,右边为DPO算......
  • 推荐昂瑞微最新蓝牙芯片-OM6626
    OM6626是功耗优化的芯片系统(SOC)解决方案,用于低功耗蓝牙系统和专有的2.4GHz应用程序。OM6626集成高性能和低功耗的射频收发器,具有蓝牙基带和丰富的外围IO扩展。OM6626还集成了电源管理单元(PMU),以提供高效的电源管理。它的目标客户是2.4GHz蓝牙低能耗系统、专有的2.4GHz系统、人......
  • 在gin-gonic框架下,gin.context 输出json, 默认会将&转义为\u0026, 怎么将这个转义关
    在gin-gonic中,如果你想要禁止对&等字符进行转义,可以使用gin.Context的PureJSON方法。这个方法允许你自己控制JSON输出,而不会进行字符的转义。以下是一个简单的例子:packagemainimport( "github.com/gin-gonic/gin" "net/http")funcmain(){ router:=gin.Default() ......
  • 2024年上半年NPDP产品经理认证【报名到这】
    产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是全球范围内产品开发与管理专业人士最杰出的倡导者,协助个人、企业或......