首先只需要考虑每种牌出现的张数即可,然后判断一副牌是否能胡,可以DP一下,令f[i][j][k][0/1]表示到了第i位,用j次i-1,i,i+1和k次i,i+1,i+2,是否出现对子然后最大的面子数量,j,k∈[0,2],转移也很容易.这样暴力枚举可以获得50pts的“好”成绩. 然后可以丢掉第一维,只考虑18个状态最大可能对子数,强制f值<=4,最大对子数<=7,发现状态不到5000种. 然后把所有状态预处理,丢掉重复的状态,把有用状态建在自动机上.所以仅需从头到尾插入一种状态即可知道是否…
[ZJOI2019]麻将(动态规划,自动机) 题面 洛谷 题解 先做一点小铺垫,对于一堆牌而言,我们只需要知道这\(n\)张牌分别出现的次数就行了,即我们只需要知道一个长度为\(n\)的串就可以了. 首先考虑如何判断一副牌是不是能胡. 出现了七对牌的情况很容易特判处理掉,只需要考虑第一种情况. 那么我们考虑\(dp\)来判断,设\(f[i][j][k][0/1]\)表示的当前考虑到了这个字符串的第\(i\)位,即考虑到了第\(i\)种牌,\(i-1,i,i+1\)的对子要用\(j\)次,\(i,…
神题……胡乱讲述一下思维过程……首先,读懂题.然后,转化问题为构造一个长度为|T|+n的字符串,使其内含有T这个子序列.之后,想到一个简单的dp.由于是回文串,我们就增量构造半个回文串,设f(i,j,k)为构造到第i个位置,从前往后匹配到j,从后往前匹配到k,这样O(m*m*n)(没有观察到其转移的性质会再乘个26).再然后,发现不妙,在最后讨论奇偶.(我的思路到此为止……)接着,观察其转移的实质,发现其实dp的过程就是在一个有限状态自动机上行走,而有限状态自动机上的状态就是目前剩下的T,所以我…
这是一道麻将自动机的模板题(雾 其实这是一道dp套dp借助自动机实现的麻将好题! 首先把期望转化一下,拆成sigema p(x>i) 现在要计算i张牌不胡的概率,也就等价于计算i张牌不胡的方案数. 如果我们能建立一个关于麻将的自动机,支持插入麻将,判断当前牌型是否能胡,既可以在麻将自动机上dp解决本题. 先考虑如何压缩一副麻将,显然只需要把它的每一种牌型的个数算出来即可. 再考虑如何判定一副麻将是否能胡,这个可以借助dp. dp[i][j][k]表示当前有i个x,还额外预留了j个(x,x-1),…
摘要:状态机模式是一种行为模式,在<设计模式>这本书中对其有详细的描述,通过多态实现不同状态的调转行为的确是一种很好的方法,只可惜在嵌入式环境下,有时只能写纯C代码,并且还需要考虑代码的重入和多任务请求跳转等情形,因此实现起来着实需要一番考虑.本文主要为你实现一个简单的有限状态机,没有考虑代码的重入和多任务跳转,为以后复杂的状态机实现,打下基础. 本文来源:用C语言实现有限状态自动机FSM 一.状态机实现的要素 首先,分析一下一个普通的状态机究竟要实现哪些内容. 状态机存储从开始时刻到现在的变…
保留版权,转载注明出处:潘军彪的个人博客(http://blog.csdn.net/panjunbiao/article/details/9378933) 将上下文无关文法读入内存之后,可以将它转换成非确定有限状态自动机.当然,不是所有的上下文无关文法都能够转换成自动机的,前提条件是这个上下文无关文法能够与正则定义等价.因此,在进行转换之前,我们需要先挑选出上下文无关文法中符合正则定义的规则.(参考博文http://blog.csdn.net/panjunbiao/article/details…
保留版权,转载需注明出处(http://blog.csdn.net/panjunbiao). 非确定有限状态自动机(Nondeterministic Finite Automata,NFA)由以下元素组成: 一个有限的状态集合S 一个输入符号集合Sigma,并且架设空字符epsilon不属于Sigma 一个状态迁移函数,对于所给的每一个状态和每一个属于Sigma或{epsilon}的符号,输出迁移状态的集合. 一个S中的状态s0作为开始状态(初始状态) S的一个子集F,作为接受状态(结束状态)…
DFA 在计算理论中,确定有限状态自动机或确定有限自动机(英语:deterministic finite automaton, DFA)是一个能实现状态转移的自动机.对于一个给定的属于该自动机的状态和一个属于该自动机字母表Σ的字符,它都能根据事先给定的转移函数转移到下一个状态(这个状态可以是先前那个状态). 可以通过建立状态机来解决问题. 每次输入都会引起状态的改变或者不变.再次输入一个值,状态又会改变. 我们把所有状态罗列出来,每次输入都改变他的状态.如果最后的状态是合法的,那么证明这个输入符…
  有限状态自动机是一种特殊的状态机.它表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型.有限状态自动机分为两种,一种是 确定有限状态自动机(DFA) ,一种是 非确定有限状态自动机(NFA) .需要知道的是,对于每一种NFA都可转换为同样识别能力的DFA.   有限状态自动机定义为五元组,即M=(S,∑,f,So,Z).对于非确定有限状态自动机和确定有限状态自动机其五元组表示的符号的意义不完全相同,下面我们将分别对其进行说明.需要注意的是所谓的非确定,是指在某个状态输入同一个符号,…
咕咕(数位dp+AC自动机) 若一个字符串的字符集合是0~m-1,那么称它为m进制字符串.给出n个m进制字符串\(s_i\),每个字符串的权值为\(v_i\).对于另一个m进制字符串\(S\),设\(s_i\)在S中的出现次数是\(cnt_i\),那么\(s_i\)对\(S\)的价值的贡献就是\(v_i*cnt_i\).因此,\(V_S=\Sigma_{i=1}^kcnt_i\times v_i\).求在区间\([l, r]\)中,有多少字符串的价值不超过k.\(\Sigma_{i=1}^n|s…
原创博客,转载请联系博主! 希望我思考问题的思路,也可以给大家一些启发或者反思! 问题背景: 现在我们的手上有一组没有明确规律,但是分布有明显聚簇现象的样本点,如下图所示: 图中数据集是显然是个3维的数据集,包括横纵坐标和色彩(高度),由于数据的分布比较不均匀,我们选择分布比较典型的[300,305)区间的数据点进行处理 我们的目的是找出这个数据空间中数据比较集中的部分,根据肉眼对样本的初步观察,这篇文章将讨论一个从横轴的维度对数据较密集的区域进行识别的一个轻量算法,其实也就是找出数据空间中的所…
在前两天的CCPC网络赛中...被一发KMP题卡了住了...遂决定,哪里跌倒就在哪里爬起来...把个KMP恶补一发,连带着把AC自动机什么的也整上. 首先,介绍设定:KMP算法计划解决的基本问题是,两个不同字符串间的匹配问题. 例如: 求字符串:JSADLKFMNALDGABJSDF;QSDLKJG;KERJG'ERPIWHEFCNKDSBVJKN LKGBLKM,ACFL 中 KASJDGNKAJ出现了几次? 当然上面的两个字符串都是滚键盘滚出来的恩... 但是直观地使用对比的方式来强行进行比…
正解:$dp$+$AC$自动机+搜索 解题报告: 传送门$QwQ$ 首先显然先建个$AC$自动机,然后考虑设$f_{i,j,k}$表示长度为$i$,现在在$AC$自动机的第$j$个位置,已经表示出来的串的状态为$k$的方案数,直接转移就好. 然后考虑输出方案.首先一定不存在可以随便填的位置. 挺显然的随便说下昂,首先如果有一个可以随便填的位置,就有26种可能.然后可以给这个位置和字符串交换位置,就至少有2种可能,这时候就已经至少有$2\times 26=52$了,所以一定不存在可以随便填的位置.…
https://zh.wikipedia.org/wiki/Trie 应用 trie树常用于搜索提示.如当输入一个网址,可以自动搜索出可能的选择.当没有完全匹配的搜索结果,可以返回前缀最相似的可能.[4] 实现方式 trie树实际上是一个确定有限状态自动机(DFA),通常用转移矩阵表示.行表示状态,列表示输入字符,(行,列)位置表示转移状态.这种方式的查询效率很高,但由于稀疏的现象严重,空间利用效率很低.也可以采用压缩的存储方式即链表来表示状态转移,但由于要线性查询,会造成效率低下. 于是人们提…
剑指 Offer 20. 表示数值的字符串 Offer 20 常规解法: 题目解题思路:需要注意几种情况: 输入的字符串前后可能有任意多个空格,这是合法的. 正负号: (1)正负号只能出现一次. (2)正负号后面一个字符必须是数字或者小数点. (3)字符串中最多有两个正负号(正常情况下最多只有一个,但是这里有指数E的情况,其前后可以加正负号). e或者E: (1) 指数符号最多出现一次. (2) 前一个字符必须是数字或者小数点,如果是小数点,则小数点不能出现在第一个字符的位置. (3) 后一个字…
状态机理论最初的发展在数字电路设计领域.而在软件设计领域,状态机设计的理论俨然已经自成一体. 状态机是软件编程中的一个重要概念,比这个概念更重要的是对它的灵活应用.在一个思路清晰而且高效的程序中,必然有状态机的身影浮现.比如说一个按键命令解析程序,就可以被看做状态机:本来在A状态下,触发一个按键后切换到了B状态,再触发另一个键后切换到C状态,或者返回到A状态.这就是最简单的按键状态机例子.实际的按键解析程序会比这更复杂些,但这不影响我们对状态机的认识.进一步看,击键动作本身也可以看做一个状态机.…
点此看题面 大致题意: 给你13张麻将牌,问你期望再摸多少张牌可以满足存在一个胡的子集. 似乎ZJOI2019Day1的最大收获是知道了什么是胡牌? 一个显然的性质 首先我们要知道一个显然的性质,即对于一副牌,我们仅需要考虑其每张牌的张数,而顺序是没有任何关系的. 因此,对于一副牌,我们可以将其转化为一个长度为\(n\),每个位置上为\(0\sim4\)的序列. 这样就方便操作了许多. 胡牌自动机 在前面性质的基础上,我们来考虑如何判断一副牌,即一个长度为\(n\)的序列是否能胡. 我们似乎可以…
[CF506E]Mr. Kitayuta's Gift 题意:给你一个字符串s,你需要在s中插入n个字符(小写字母),每个字符可以被插在任意位置.问可以得到多少种本质不同的字符串,使得这个串是回文的.答案对10007取模. $|s|\le 200,n\le 10^9$ 题解:神题. 首先由于题目要求本质不同,所以我们为了防止重复,考虑从两边向中间不断复原回文串,如果新加入的字符与s两端(或一端)的字符相同,则匹配成功,继续匹配下一个字符.也就是说我们取的是s在回文串中最外面的出现位置. 为了方便…
Ural1158 看上去很困难的一道题. 原文地址 http://blog.csdn.net/prolightsfxjh/article/details/54729646 题意:给出n个不同的字符,用这n个字符构成长度为m的字符串,要求每个串的子串都不出现给定的p个串中的任一个,求满足要求的字符串的个数.   AC自动机+dp 因为构成的最终串是由一个字符一个字符添加到字符串尾部构成的,那么如果一个串的后缀如果恰好是某个给定串的前缀时,这个串就可能最终成为非法串. 用k个给定串建立AC自动机,然…
洛谷题面传送门 一道 dp 套 dp 的 immortal tea 首先考虑如何判断一套牌是否已经胡牌了,考虑 \(dp\)​​​​​.我们考虑将所有牌按权值大小从大到小排成一列,那我们设 \(dp_{i,j,k,0/1}\)​​​​ 表示目前考虑了权值 \(\le i\)​​​​ 的牌,我们之前预留了 \(j\)​​​ 张形如 \((i-1,i)\)​​​ 的牌与 \(i+1\)​​​ 形成刻子,又留了 \(k\)​​​ 张 \(i\)​​​ 与 \(i+1,i+2\)​​​ 形成刻子,\(0…
ZJOI2019神题,间接送我退役的神题233 考场上由于T2写挂去写爆搜的时候已经没多少时间了,所以就写挂了233 这里不多废话直接开始讲正解吧,我们把算法分成两部分 1.建一个"胡牌自动机" 首先我们发现这题不能转化为一般DP问题求解的最大瓶颈就是因为它的状态很诡异 但是我们细细一想,形如\(\{1,1,1,2,3,4,5,6,7,8,9,10,12,12\}\)和\(\{3,3,3,5,6,7,9,10,11,14,15,16,20,20\}\)的本质其实是一样的(都是三个顺子+…
原题传送门 希望这题不会让你对麻将的热爱消失殆尽 我们珂以统计每种牌出现的次数,不需要统计是第几张牌 判一副牌能不能和,类似这道题 对于这题: 设\(f[i][j][k][0/1]\)表示前\(i\)种牌,顺子\((i-1,i,i+1)\)出现了\(j\)次,顺子\((i,i+1,i+2)\)出现了\(k\)次,有/没有雀头的最多面子数.转移比较简单 我们珂以发现\(j\)这维不太重要,强制dp值不超过\(4\)(超过\(4\)也没有用),雀头数不超过\(7\)(类似),爆搜珂以搜出本质不同的状…
题意:给定n个文本串,m个病毒串,文本串重叠部分可以合并,但合并后不能含有病毒串,问所有文本串合并后最短多长. (2 <= n <= 10, 1 <= m <= 1000) 题解: 首先可以想出一个简单的位压DP : d[s][i] = min(d[ss][j] - 合并i.j的重叠部分长度) 问题就集中在了如何求出两个串x.y合并后的最短长度并且合并后不能包含病毒串. 引用一个题解:来自http://blog.csdn.net/woshi250hua/article/detail…
Resource Archiver Time Limit: 10000MS   Memory Limit: 100000KB   64bit IO Format: %I64d & %I64u Description Great! Your new software is almost finished! The only thing left to do is archiving all your n resource files into a big one. Wait a minute… y…
题目链接 1.求A的最短子串,它不是B的子串. 子串是连续的,对B建SAM,枚举起点,在SAM上找到第一个无法匹配点即可.O(n)用SAM能做吗..开始想错了. 2.求A的最短子串,它不是B的子序列. 子序列...直接建SAM没啥用.考虑A[i]和上一位A[i-1],用f[i][j]表示到A[i]匹配到B[j]时连续的A的子串长度,如果A[i]==B[j],则f[i][j]=max{f[i-1][k]+1}(k<j). 是取max啊,因为B会尽可能匹配.枚举完B[n]后且max{f[i][k]}…
DNA repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4815   Accepted: 2237 Description Biologists finally invent techniques of repairing DNA that contains segments causing kinds of inherited diseases. For the sake of simplicity, a…
/** 链接:https://vjudge.net/problem/UVA-11468 详见lrj训练指南P218 我的是反向求存在模板串的概率. dp[i][j]表示当前i位置选择字符,前面i-1个字符在自动机的匹配节点编号为j时候的状态可以获得的存在概率. 书上的好简洁,求idx(c)直接利用已经给定的n个字符的下标作为结果. 正向求解!厉害. */ #include<bits/stdc++.h> using namespace std; #define P pair<int,int…
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1559 分析: 这个题意真的是很**啊!!!直接说每一个字符串至少出现一次不就好了吗......一开始理解错了ORZ 观察发现这个东西是字符串相关,并且有多个模板串,所有串的长度短并且串的数量不多,最多10个,因此大概可以想到一个AC自动机上面的状压. 首先把被包含的单词去掉,它们对决策不影响,这样在写方程的时候就可以不考虑last了. 令f(i,l,s)表示当位于AC自动机的状态i时,…
给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 1] 内的字符串. 输出格式: 在一行中输出至多删掉其中 3 个字符后不同字符串的个数. 输入样例: ababcc 输出样例: 25 提示: 删掉 0 个字符得到 "ababcc". 删掉 1 个字符得到 "babcc", "aabcc", "abbcc&quo…
Description Could you imaging a monkey writing computer programs? Surely monkeys are smart among animals. But their limited intelligence is no match for our human beings. However, there is a theorem about monkeys, and it states that monkeys can write…