首页 > 其他分享 >P4590 [TJOI2018] 游园会

P4590 [TJOI2018] 游园会

时间:2023-07-16 23:47:29浏览次数:58  
标签:奖章 状态 P4590 NOI 兑奖 游园会 TJOI2018 dp

P4590 [TJOI2018] 游园会

题意

小豆参加了NOI的游园会,会场上每完成一个项目就会获得一个奖章,奖章只会是\(N, O, I\)的字样。在会场。上他收集到了\(K\)个奖章组成的串。兑奖规则是奖章串和兑奖串的最长公共子序列长度为小豆最后奖励的等级。现在已知兑奖串长度为\(N\),并且在兑奖串上不会出现连续三个奖章为\(NOI\),即奖章中不会出现子串\(NOI\)。现在小豆想知道各个奖励等级会对应多少个不同的合法兑奖串。

题解

设我们求的串为 \(A\) 串,给的串为 \(B\) 串。

我们先考虑怎么求 \(lcs\) ,有一个暴力 \(dp\) , \(f_{i,j}\) 表示 \(A\) 串的决策点在 \(i\) ,\(B\) 串的决策点在 \(j\) 的 \(lca\) 长度。

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

正确性显然。
但是我们要求的是 \(lcs\) 长度为 \(k\) 的合法 \(A\) 串数量。
这个东西的合法性都需要用 \(dp\) 来确定,发现我们不能用简单的 \(dp\) 来计数。
有一个很nb的东西叫做 \(dp\) 套 \(dp\),顾名思义我们把一个 \(dp\) 压入另一个 \(dp\) 的状态来操作。
一个比较暴力的办法是设 \(g_{i,S}\),决策点在 \(i\),\(f\) 数组状态为 \(S\) 的方案数,\(S\) 是一个二维数组,然后我们对 \(S\) 进行 \(dp\) 得到下一个状态进行转移。
这时候的状态数很爆炸,发现我们并不需要将整个 \(f\) 的存下来,对于决策点 \(i\) ,我们 \(dp\) 得到下一个状态的地方只有 \(f_i\),所以我们可以将状态简化。
\(g_{i,S}\) 表示决策点在 \(i\),\(f_i\) 的状态为 \(S\) 的方案数,\(S\) 是一个一维数组,这样我们可以只通过上一层即 \(f_{i-1}\) 这一层来得到下一个状态。
这时候已经可以做了,但是还可以再简化状态然后有更方便的写法。
注意到 \(f_{i,j}\) 与 \(f_{i,j-1}\) 的差值只能为 \(0,1\),所以我们就不用存具体的数值,只需要存差分序列即可,由于只有 \(0,1\),所以使用状压储存。
然后我们就完成了 \(lcs\) 长度为 \(i\) 的个数统计。

然后考虑如何解决不存在 NOI,的条件,这个比较简单,可以通过简单的添加状态解决。
\(g_{i,S,k}\) 表示决策点在 \(i\),\(f_i\) 的状态为 \(S\),NOI填了 \(k(k \leq 2)\) 位的方案数。

时间复杂度 \(O(nk2^k)\),code

...

这是我第一次写 \(dp\) 套 \(dp\),可能会有些问题。
我们的外层 \(dp\) 进行正常的 \(dp\),内层 \(dp\) 得到下一个状态。

标签:奖章,状态,P4590,NOI,兑奖,游园会,TJOI2018,dp
From: https://www.cnblogs.com/snow-panther/p/17558851.html

相关文章

  • Luogu P4591 [TJOI2018]碱基序列
    [TJOI2018]碱基序列题目描述小豆参加了生物实验室。在实验室里,他主要研究蛋白质。他现在研究的蛋白质是由\(k\)个氨基酸按一定顺序构成的。每一个氨基酸都可能有\(a\)种碱基序列\(s_{i,j}\)构成。现在小豆有一个碱基串\(s\),小豆想知道在这个碱基上都多少中不同的组合方式可能得......
  • 「TJOI2018」智力竞赛(二分+DAG最小可相交路径覆盖)
    https://loj.ac/problem/2574这个题目描述扎心了。简要题意:用n+1条可以相交的路径去覆盖DAG,使得没被覆盖的点的权值的最小值最大。首先二分答案,问题转换为有一些点一定要被覆盖,问n+1条路径内有没有解。这个可以暴力费用流,每个点拆成两个点,\(i->i',r=1\),如果这个点必选,则费用为inf,......
  • 【洛谷】P4590 [TJOI2018]游园会(dp套dp)
    原题链接题意对于一个长度为\(n\)的仅由\(N,O,I\)组成且不包含字串\(NOI\)的字符串\(S\),其与一个给定的长度为\(K\)的字符串的最长公共子序列为\(LCS\)。求出......
  • Luogu P4592 [TJOI2018]异或 做题记录
    随机跳的。树上维护序列,显然树剖。维护异或,显然01trie。01trie维护区间异或,显然可持久化一下。看到时限很大,显然可以双log。于是跑一边树剖,再根据id暴力建一个可......
  • Luogu P4591 [TJOI2018] 碱基序列
    链接难度:\(\texttt{省选/NOI-}\)有\(k\)组,每一组有\(a_i\)个字符串\(t_{k,a_i}\),询问分别在每一组选一个字符串拼成的字符串在文本串\(s\)出现的个数的所有情况......
  • LibreOJ L2576 「TJOI2018」str
    链接难度:\(\texttt{?}\)有\(k\)组,每一组有\(a_i\)个字符串\(t_{k,a_i}\),询问分别在每一组选一个字符串拼成的字符串在文本串\(s\)出现的个数的所有情况的总和对......
  • LG_P4588 [TJOI2018] 数学计算 题解
    LuoguP4588题解这个玩意还是挺好想到的,也不难看出他是一个线段树。没想到可以评上蓝。考虑每次操作对于答案的贡献。由于\(x=1\),所以我们相当于是在维护一堆数的积,初始......
  • BZOJ 5334: [Tjoi2018]数学计算
    题目链接:​​传送门​​一眼看过去很简单的样子根节点维护线段树乘积每个叶节点对应每一个操作如果是2操作则该叶节点为1否则就是就是要乘的m/***@Date:2019-03-27T......
  • P4588 [TJOI2018]数学计算
    线段树板子题。#include<iostream>#include<cstring>usingnamespacestd;#defineintlonglongconstintN=8e5+1;intmod;intq,m;namespacest{inttree[......
  • P4592 [TJOI2018]异或
    有一颗以\(1\)为根节点的由\(n\)个节点组成的树,节点从\(1\)至\(n\)编号。树上每个节点上都有一个权值\(v_i\)。现在有\(q\)次操作,操作如下:\(1~x~z\):查询节点......