JZOJ 3293. 【SHTSC2013】阶乘字符串】的更多相关文章

题目 题目大意 给你一个字符串,判断这个字符串是否为"阶乘字符串". 就是子序列包含字符集的全排列的字符串. n≤26n\leq 26n≤26 ∣S∣≤450|S|\leq 450∣S∣≤450 思考历程 首先,设toi,chto_{i,ch}toi,ch​表示iii后面遇到的第一个chchch(字符)的位置. 这个东西很好预处理.搞出之后可以看成一张图. 那么我们就可以搞出最裸的暴力:枚举全排列,在图上跑,找一找是否有这样的路径. 显然,当前选的字母一定是越早越好,这样后面就能有更多…
P3989 [SHOI2013]阶乘字符串 题目描述 给定一个由前\(n(\le 26)\)个小写字母组成的串\(S(|S|\le 450)\).串\(S\)是阶乘字符串当且仅当前 \(n\) 个小写字母的全排列(共\(n!\)种)都作为的子序列(可以不连续)出现. 请判断出给定的串是否是阶乘字符串. 当\(n> 21\)时无解,原因不明,留坑 剩下的状压一下就好了 \(dp_s\)表示集合\(s\)的所有排列出现的最前位置 枚举集合最后一个元素更新 \(yuu_{i,j}\)表示\(j\)在\…
题目链接:阶乘字符串 又是一道不会做的题……看了题解后我被吓傻了…… 首先我们可以有一个显然的\(O(2^nn)\)的做法.我们先预处理出\(g_{i,j}\)表示字符串中\(i\)号位置开始第一个\(j\)字符出现在什么位置.然后就可以用\(f_S\)表示使得\(S\)集合内字符的排列全都出现的最小长度,然后就可以递推了. 然后……翻了一波题解,发现当\(n>21\)的时候无解……听说合法的串长应该是\(n^2\)级别的,所以当\(n>21\)的时候就无解了……然后就可以\(O(2^nn)\…
题目描述 给定一个由前\(n\)个小写字母组成的串\(S\). 串\(S\)是阶乘字符串当且仅当前\(n\)个小写字母的全排列(共\(n!\)种)都作为\(S\)的子序列(可以不连续)出现. 由这个定义出发,可以得到一个简单的枚举法去验证,但是它实在太慢了.所以现在请你设计一个算法,在\(1\)秒内判断出给定的串是否是阶乘字符串. 输入格式 输入第\(1\)行一个整数\(T\),表示这个文件中会有\(T\)组数据. 接下来分\(T\)个块,每块\(2\)行: 第\(1\)行一个正整数\(n\),…
description 给定一个由前n个小写字母组成的串S. 串S是阶乘字符串当且仅当前n个小写字母的全排列(共n!种)都作为S的子序列(可以不连续)出现. 由这个定义出发,可以得到一个简单的枚举法去验证,但是它实在太慢了.所以现在请你设计一个算法,在1秒内判断出给定的串是否是阶乘字符串. analysis 状压\(DP\) 不知道为什么\(22\)个字母或以上的都不合法 设\(f[S]\)表示\(S\)状态中为\(1\)的字母的全排列全都出现过的最前位置 转移就是在某个全排列的末尾插上一个新字…
可以大胆猜想n>21时无解,至于依据,不开O2,1s,n<=21刚好能卡过去= = 并不会证= = #include<cstdio> void up(int& a,int b){ a=a<b?b:a; } int test,n,m,i,j; char t[500]; int f[1<<21],s[500][21]; int main(){ scanf("%d",&test); while(test--){ scanf("…
题目链接 BZOJ4416 题解 建立序列自动机,即预处理数组\(nxt[i][j]\)表示\(i\)位置之后下一个\(j\)出现的位置 设\(f[i]\)表示合法字符集合为\(i\)的最短前缀,枚举最后一个加入的字符进行转移 注意到合法串长度是\(O(n^2)\)级别的,所以\(n > 21\)直接判掉 #include<algorithm> #include<iostream> #include<cstring> #include<cstdio>…
怎么也没想到是子集DP,想到了应该就没什么难度了. 首先n>21时必定为NO. g[i][j]表示位置i后的第一个字母j在哪个位置,n*21求出. f[S]表示S的所有全排列子序列出现的最后末尾位置,枚举最后一个字母转移.21*2^21 #include<cstdio> #include<cstring> #include<algorithm> #define rep(i,l,r) for (int i=(l); i<=(r); i++) using nam…
当n大到一定程度(>21)时一定无解,并不会证. 如果要取出一个排列,显然应该让每一位在序列中的位置尽量靠前.于是设f[S]表示存在S子集中这些字母所组成的所有排列的最短前缀的长度,枚举当前排列最后一个字母转移即可. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm>…
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem 10983 18765 Y 1036 [ZJOI2008]树的统计Count 5293 13132 Y 1588 [HNOI2002]营业额统计 5056 13607 1001 [BeiJing2006]狼抓兔子 4526 18386 Y 2002 [Hnoi2010]Bounce 弹飞绵羊 43…