首页 > 其他分享 >详细揭秘:区间 DP 小计

详细揭秘:区间 DP 小计

时间:2024-08-17 16:18:46浏览次数:8  
标签:le text sum 小计 史莱姆 括号 区间 揭秘 DP

状态设计

例:沉玉谷

\(n\) 个有色小球排成一行,第 \(i\) 个小球颜色为 \(c_i\),每次可以拿走连续一段颜色相同的小球,问有多少种方式取完所有小球。

\(n\le 50\)。

考虑如何求一个区间的答案:枚举与 \(l\) 一同删去的最右的小球。不相交区间之间没有影响,所以还要多一维表示取了几次。

设 \(f_{l,r,k}\) 表示区间 \([l,r]\) 取 \(k\) 次取完的方案数,\(g_{l,r,k}\) 表示在 \(c_l=c_r\) 的情况下,区间 \([l,r]\) 取 \(k\) 次,不取 \(l,r\) 且剩下的小球颜色均与 \(c_l\) 相同的方案数。

\[g_{l,r,k}=\sum_{p=l}^{r-1}[c_l=c_p]\sum_{i=0}^{k}g_{l,p,i}f_{p+1,r-1,k-i}\binom{k}{i} \]

\[f_{l,r,k}=\sum_{p=l}^{r}[c_l=c_p]\sum_{i=1}^{k}g_{l,p,i-1}f_{p+1,r,k-i}\binom{k}{i} \]

时间复杂度 \(O(n^5)\)。

例:括号序列

一个括号串由 ()* 三种字符构成,给定一个常数 \(k\),按如下的方法定义合法括号串:

  • 空串为合法括号串;
  • A,B 均为合法括号串,S* 重复不超过 \(k\) 次得到的串,则 (A)(AS)(SA)ABASB 均为合法括号串。

给定一个长为 \(n\) 的包含 ()*? 四种字符的字符串,求有多少种将所有字符 ? 替换为 ()* 的方案数使得其为合法括号串。

\(n\le 500\)。

合法的括号串必然形如 (A)*(B)***(C)**(D),其中每个 * 连续段的长度均小于等于 \(k\)。

设 \(f_{l,r,0/1/2/3}\) 分别表示 \([l,r]\) 得到 A(A)*AA* 的方案数。注意到 \(0\) 状态包含 \(1\) 状态。

有两种转移,第一种转移为在外加括号,则当 \(l,r\) 分别可以为 () 时有:

\[f_{l,r,0/1}\gets f_{l+1,r-1,0}+f_{l+1,r-1,2}+f_{l+1,r-1,3}+[\text{chk}(l+1,r-1)] \]

其中 \([\text{chk}(l,r)]\) 表示 \([l,r]\) 是否能成为 S

第二种转移为拼接合法括号串,枚举第一个 (A)

\[f_{l,r,0}\gets \sum_{k=l}^rf_{l,k,1}(f_{k+1,r,0}+f_{k+1,r,2}) \]

\[f_{l,r,2}\gets \sum_{k=l}^r[\text{chk}(l,k)]f_{k+1,r,0} \]

\[f_{l,r,3}\gets \sum_{k=l}^r[\text{chk}(k,r)]f_{l,k-1,0} \]

时间复杂度 \(O(n^3)\)。

例:Minimum Sum of Maximums P

有一个长为 \(n\) 的序列 \(a_{1\dots n}\),初始有 \(k\) 个位置 \(a_{p_1}\dots a_{p_k}\) 已经有值,其余位置均无值。此外还有 \(n-k\) 个数 \(b_{1\dots n-k}\),你需要将它们放入初始无值的位置并最小化 \(\sum_{i=1}^{n-1}\max(a_i,a_{i+1})\)。

\(n\le 300\),\(k\le \min(n,6)\)。

最小化 \(\sum\max(a_i,a_{i+1})\) 等价于最小化 \(\sum|a_i-a_{i+1}|\)。

令 \(a_0=a_{n+1}=+\infty\),固定的位置将序列划分为若干段,要将剩余的数填进去。

考虑一段内填入的数,一段内填的数必然是有序的,所以只需要考虑给这一段填的数的最小值和最大值,不妨设为 \(l_i,r_i\),设这一段两端固定的数分别为 \(a_i,b_i(a_i\le b_i)\),则这个区间的代价为 \(r_i-l_i+|a_i-l_i|+|b_i-r_i|\)。

使用调整法可以说明一定有某种最优方案使得所有的 \(\bm{[l_i,r_i]}\) 之间只有相离和包含关系,于是将 \(b\) 排序,设计状态 \(f_{l,r,s}\) 表示使用 \(b_{l\sim r}\) 中的数填满 \(s\) 中的段的最小代价,注意可能有未使用的数。设 \(\text{len}(s)\) 表示 \(s\) 中的段的长度总和。

转移共有三种:

  • \(b_l,b_r\) 预留给下一次包含它们的区间

\[f_{l,r,s}\gets \min(f_{l+1,r,s},f_{l,r-1,s}) \]

  • 用 \(b_{l\sim r}\) 中剩余的数填入某个段,条件为 \(\text{len}(s)=r-l+1\):

\[f_{l,r,s}=\min_{i\in s}\left(f_{l,r,s/\{i\}}+r-l+|a_i-l|+|b_i-r|\right) \]

  • 将两个无交区间合并,由于前两种转移所以只需要考虑用靠着端点的连续若干个数转移

\[f_{l,r,s}=\min_{t\sube s}\left(f_{l,l+\text{len}(t)-1,t}+f_{r-\text{len}(s/t)+1,r,s/t}\right) \]

时间复杂度 \(O(3^kn^2)\)。

例:史莱姆工厂

有 \(n\) 个史莱姆排成一行,其中第 \(i\) 个的颜色为 \(c_i\),质量为 \(m_i\)。

你可以任意次花费 \(C\) 将某个史莱姆的质量增加 \(1\)。你可以任意卖出史莱姆,一个质量为 \(i\) 的史莱姆有 \(p_i\) 的价值。但是在任意时刻,如果有史莱姆的质量达到 \(k\) 或以上,这个史莱姆就必须立即被卖掉。

卖掉一个史莱姆之后,它两边的史莱姆会靠在一起。颜色相同的史莱姆靠在一起会融合成一个质量等于它们的质量和的史莱姆。

求出卖掉所有史莱姆最多可以净赚多少。

\(n\le 150\),\(k\le 10\)。保证 \(\bm{p_i-C\le p_{i+1}}\)。

由于 \(p_i-C\le p_{i+1}\),我们不会在卖出时再增加史莱姆的质量。

设 \(f_{l,r}\) 表示 \([l,r]\) 的答案,\(g_{l,r,w}\) 表示 \([l,r]\) 中卖出一些史莱姆且最终剩余一个包含 \(l\) 的质量为 \(w\) 的史莱姆的最大获利,\(h_{l,r,w}\) 表示 \([l,r]\) 中卖出一些史莱姆且最终剩余一个包含 \(r\) 的质量为 \(w\) 的史莱姆的最大获利。转移 \(g_{l,r,w}\) 时枚举 \(l\) 之后第一个合并进来的史莱姆编号

\[g_{l,r,w}=\max_{i=l+1,c_l=c_i}^r(f_{l+1,i-1}+g_{i,r,w-m_l}) \]

此外还有不合并的情况即 \(g_{l,r,m_l}=f_{l+1,r}\)。\(h_{l,r,w}\) 的转移同理。

转移 \(f_{l,r}\) 时,如果 \(c_l=c_r\) 且最后 \(l,r\) 合并:

\[f_{l,r}=\max_{i=l,c_l=c_i}^{r-1}\max_{1\le x,y<k}(g_{l,i,x}+h_{i+1,r,y}+p_{x+y}) \]

如果最后 \(l,r\) 不合并,注意区间内的史莱姆不能和区间外的合并

\[f_{l,r}=\max_{i=l,c_i\ne c_{r+1}\text{ or }c_{i+1}\ne c_{l-1}}^{r-1}(f_{l,i}+f_{i+1,r}) \]

上述几个转移对应的史莱姆删除顺序可以手玩一下。

时间复杂度 \(O(n^3k^2)\)。

算法优化

例:Merging Cells P

有 \(n\) 个初始大小为 \(s_{1\dots n}\) 的细胞从左到右排成一行。当存在多个细胞时,均匀地随机选择一对相邻细胞,其中较大的细胞会吞掉较小的细胞,若它们大小相同则编号较大的细胞会吞掉编号较小的细胞。对 \(\forall i\in[1,n]\) 求出最终 \(i\) 细胞存活的概率。

\(n\le 5000\)。

区间 DP,但是传统枚举最后一次合并,设计 \(f_{l,r,i}\) 表示 \([l,r]\) 得到 \(i\) 的概率,时间复杂度 \(O(n^4)\),难以优化。

思维方向是降维或者正难即反。上述做法枚举了最后一次合并,将小区间合并成为大区间。而一个区间得到的细胞大小是固定的,不妨考虑将大区间分裂成为小区间,设计 \(f_{l,r}\) 表示最终答案在 \([l,r]\) 的概率。

\[f_{l,r}=\sum_{1\le k<l}^{s(k,l-1)\le s(l,r)}\dfrac{f_{k,r}}{r-k}+\sum_{r<k\le n}^{s(r+1,k)<s(l,r)}\dfrac{f_{l,k}}{k-l} \]

时间复杂度 \(O(n^3)\),需要继续优化。显然对于一个区间 \([l,r]\) 只有一个区间内的 \(k\) 是合法的,可以双指针求出。以合适的方式选择前缀和、后缀和优化即可做到 \(O(n^2)\)。

例:Si

给你一个长为 \(n\) 的单调递增的序列 \(a_{1\dots n}\),你需要猜出一个数 \(x\in[1,n]\)。每次可以询问一个整数 \(y\),你将会得到 \(y\le a_x\) 是否成立,该次询问会造成 \(|a_x-y|\) 的代价且你并不知道该代价。求出确定 \(x\) 所需要的最小代价和。

\(n\le 1000\)。

将代价中的绝对值拆掉,设 \(f_{l,r,c}\) 表示已经确定 \(x\in[l,r]\),且询问的所有 \(y\) 中小于 \(a_x\) 的个数减去大于 \(a_x\) 的个数为 \(c\)。则 \(f_{i,i,c}=ca_i\),转移为:

\[f_{l,r,c}=\min_{k=l}^{r-1}\min_{y=a_k+1}^{a_{k+1}}\max(f_{l,k,c-1}+y,f_{k+1,r,c+1}-y) \]

其中对于单个 \(k\) 其对应的最小 \(y\) 显然可以 \(O(1)\) 计算。而经过尝试,\(c\) 的绝对值不会超过 \(O(\log v)\),于是我们得到了一个 \(O(n^3\log v)\) 的算法。

考虑决策单调性,归纳易证 \(f_{l+1,r,c}\le f_{l,r,c}\le f_{l,r+1,c}\),于是我们可以证明 \(f_{l,r,c}\) 的决策点 \(\text{opt}_c(l,r)\) 满足 \(\text{opt}_c(l,r-1)\le\text{opt}_c(l,r)\le \text{opt}_c(l+1,r)\)。直接使用决策单调性优化便可做到 \(O(n^2\log v)\)。

标签:le,text,sum,小计,史莱姆,括号,区间,揭秘,DP
From: https://www.cnblogs.com/cyffff/p/18364546

相关文章

  • C240817D. 模拟赛:树上dp(以i为起点)+set操作
    C240817D.模拟赛比较显然的树上dp,但是维护set比较烦考场上其实自己是定义\(f[i]\)是以\(i\)结尾,然后这样的话单次更新根本做不到\(O(logN)\).反应实在是太迟钝了,考场想“如果有一种只更新一条链的dp就好了”结果完全没想到只需变成以\(i\)开头就行了.积累经验吧。......
  • 浅谈TCP协议、UDP协议
    一、介绍说明TCP(传输控制协议)面向连接:TCP在数据传输之前必须建立连接。这通过一个称为三次握手的过程来完成,确保连接的两端都准备好进行数据传输。可靠性:TCP提供可靠的数据传输,确保数据包正确无误地到达目的地。如果数据包在传输过程中丢失或损坏,TCP会重新发送这些数据包......
  • 换根dp
    大致步骤 换根dp大致步骤 方法一:(up数组)(1)g[i]以i为根的子树(不是整棵树),由孩子节点推过来(2)up[i]i节点往上走的最大属性(3)f[i]整棵树(不是子树)记录一些值 方法二:加减法(1)g[i]以i为根的子树(不是整棵树),由孩子节点推过来(2)f[i]整棵树(不是子树)记录一......
  • TCP/UDP网络聊天室
        本博客仅对网络聊天室项目进行分享,仅供学习讨论使用,欢迎大家讨论。UDP网络聊天室项目要求        利用UDP协议,实现一套聊天室软件。服务器端记录客户端的地址,客户端发送消息后,服务器群发给各个客户端软件,服务器也可以自己发送通知给所有客户端。  ......
  • 【网络】UDP回显服务器和客户端的构造,以及连接流程
    回显服务器(EchoServer)最简单的客户端服务器程序,不涉及到业务流程,只是对与API的用法做演示客户端发送什么样的请求,服务器就返回什么样的响应,没有任何业务逻辑,没有进行任何计算或者处理0.构造方法网络编程必须要使用网卡,就需要用到Socket对象创建一个DatagramS......
  • 巨大的数(dp+矩阵加速)
    第3题   巨大的数 查看测评数据信息小明定义了一种生成大数的函数f[n],他的含义是将1-n所有的正整数按照从小到大拼接起来,形成一个巨大的数,例如f[13]=12345678910111213,现在给定一个数n,输出f[n]%m的值,其中n和m都是正整数输入格式 第一行两个整数n,m部分数据:1<=n<=......
  • 抛硬币(概率dp)
    https://www.luogu.com.cn/problem/AT_dp_i第1题   抛硬币 查看测评数据信息有n个质地不均匀的硬币,抛第i枚硬币器正面朝上的概率是p[i],反面朝上的概率是1-p[i],扔完n个硬币后,求正面朝上的个数大于反面朝上的概率是多少。结果保留三位小数输入格式 第一行一个整数n,......
  • 昆明自闭症学校大揭秘!
    在昆明这座美丽的城市,有一些特殊的学校致力于自闭症儿童的教育和康复,它们虽然各具特色,但也存在一些显著的共同点。这些学校都拥有专业且富有爱心的师资团队。教师们不仅具备扎实的特殊教育专业知识,还拥有无尽的耐心和关爱。他们深知自闭症儿童的特殊需求,能够敏锐地捕捉到孩子......
  • 千亿市场规模揭秘:中国少儿英语培训市场蓬勃发展
    一、行业简述   行业概念少儿英语培训行业,指的是针对3-18岁年龄段儿童提供英语教育的服务领域。随着全球化的推进和英语在国际交流中的重要地位日益凸显,家长们对孩子的英语教育投入逐渐增加,少儿英语培训行业应运而生并迅速发展。   行业特点(1)市场需求旺盛:随着国民......
  • 第六章 网络互连与互联网(五):TCP 和 UDP 协议
    五、TCP和UDP协议在TCP/IP协议簇中有两个传输协议,即传输控制协议(TCP)和用户数据报协议(UDP)。TCP是面向连接的,而UDP是无连接的。1、TCP服务(1)TCP协议提供面向连接的、可靠的传输服务,适用于各种可靠的或不可靠的网络。(2)TCP用户送来的是字节流形式的数据,这些数据缓存......