Ural1158 看上去很困难的一道题. 原文地址 http://blog.csdn.net/prolightsfxjh/article/details/54729646 题意:给出n个不同的字符,用这n个字符构成长度为m的字符串,要求每个串的子串都不出现给定的p个串中的任一个,求满足要求的字符串的个数.   AC自动机+dp 因为构成的最终串是由一个字符一个字符添加到字符串尾部构成的,那么如果一个串的后缀如果恰好是某个给定串的前缀时,这个串就可能最终成为非法串. 用k个给定串建立AC自动机,然…
 Censored! 题目大意:给定一些字符,将这些字符组成一个固定长度的字符串,但是字符串不能包含一些禁词,问你有多少种组合方式. 这是一道好题,既然出现了“一些”禁词,那么这题肯定和AC自动机有点关系了,对于这一题来说,因为我们需要的是求出在N^M种状态除去包含禁词的状态数,枚举肯定是不现实的了,我们唯一能做的只能是DP,但是怎么DP呢?只能是通过AC自动机来想了,由此我们来看一下trie树,我们知道trie树是可以表示不同字符串前后缀的转移关系的,但是这一题并不是要我们求出字串中是否有禁词…
Censored! Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 6956   Accepted: 1887 Description The alphabet of Freeland consists of exactly N letters. Each sentence of Freeland language (also known as Freish) consists of exactly M letters w…
题目链接:https://vjudge.net/problem/POJ-1625 Censored! Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 10870   Accepted: 2979 Description The alphabet of Freeland consists of exactly N letters. Each sentence of Freeland language (also known…
Censored! Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 10824   Accepted: 2966 Description The alphabet of Freeland consists of exactly N letters. Each sentence of Freeland language (also known as Freish) consists of exactly M letters…
神题……胡乱讲述一下思维过程……首先,读懂题.然后,转化问题为构造一个长度为|T|+n的字符串,使其内含有T这个子序列.之后,想到一个简单的dp.由于是回文串,我们就增量构造半个回文串,设f(i,j,k)为构造到第i个位置,从前往后匹配到j,从后往前匹配到k,这样O(m*m*n)(没有观察到其转移的性质会再乘个26).再然后,发现不妙,在最后讨论奇偶.(我的思路到此为止……)接着,观察其转移的实质,发现其实dp的过程就是在一个有限状态自动机上行走,而有限状态自动机上的状态就是目前剩下的T,所以我…
题目问长度m不包含一些不文明单词的字符串有多少个. 依然是水水的AC自动机+DP..做完后发现居然和POJ2778是一道题,回过头来看都水水的... dp[i][j]表示长度i(在自动机转移i步)且后缀状态为自动机第j个结点的合法字符串数 dp[0][0]=1 转移转移... 注意要用高精度,因为答案最多5050. 还有就是要用unsigned char,题目的输入居然有拓展的ASCII码,编码128-255. #include<cstdio> #include<cstring>…
POJ 2778 DNA Sequence (1)题意 : 给出m个病毒串,问你由ATGC构成的长度为 n 且不包含这些病毒串的个数有多少个 关键字眼:不包含,个数,长度 DP[i][j] : 表示长度为i,在trie图中j节点,不包含病毒串的个数 状态转移: DP[i+1][k]+=DP[i][j]*G[j][k]  (G[j][k] 表示 在trie图的安全图中j 到 k是否有边) 但是!这题给出n长度特别大,故无法进行正常的DP;   我们在转换下思路 这题无非就是在全图中的0节点到其他节…
题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上布置一片阿姆斯特朗回旋加速式阿姆斯特朗炮,那么在N行M列单位长度大小的地图上,求解阿姆斯特朗回旋加速式阿姆斯特朗炮最大的部署数量和对应部署方案总数. 输入 每组输入一行,为两个整数N,M (N <= 100:M <= 10) 输出 每组一行两个整数, 第一个为阿姆斯特朗回旋加速式阿姆斯特朗炮的个数…
题目:给出n个串,问最多能够选出多少个串,使得前面串是后面串的子串(按照输入顺序) 分析: 其实这题是这题SPOJ 7758. Growing Strings AC自动机DP的进阶版本,主题思想差不多. 对于这题来说,需要离线操作.dp转移也是很显然. 但是由于数据比较大,所以普通的沿着fail指针往上走,逐步更新答案会TLE. 考虑把fail指针反向,由于ac自动机的每个节点均有唯一的fail指针,若是沿着fail指针往上走,显然都会走到root,所以反向之后显然是一棵树,不妨称之为fail树…