uoj#149】的更多相关文章

传送门 Solution DP+滚动数组. DP状态 \(dp[i][j][k]\): \(A\)的第\(i\)个字符和\(B\)的第\(j\)个字符匹配且该字符在第\(k\)个子串中的方案数. 转移方程 \(dp[0][0][0]=1\) \(dp[i][j][k] = dp[i-1][j-1][k] + \sum\limits _{0\le i' <i} dp[i'][j-1][k-1]\) 用数组\(sum[j][k]\)维护转移时用到的那个和\(\sum\limits _{0\le i'…
dp 没想出来 最先开始想 dp[i][j][k]表示s匹配到i,t匹配到j,当前分了k段的方案数 s[i]==t[j] dp[i][j][k]+=dp[i-1][j-1][k-1] s[i]==t[j]&&s[i-1]==t[j-1] dp[i][j][k]+=dp[i-1][j-1][k] dp[i][j][k]+=dp[i-1][j][k] 问题出在中间那个式子,但是我不知道怎么改,这样会多出来很多状态,比如说aabaab和aabk=1 dp[5][2][1]=4 因为dp[5][2…
题目:洛谷P2679.Vijos P1982.codevs4560.UOJ#149. 题目大意:有长度为n的A串和长度为m的B串.现在要从A串中取出k个互不重叠的子串,使它们按顺序相连后得到B串.问有多少种方案. 解题思路:DP. 设f[i][j[[k][0]表示A的前i个字符匹配B的前j个字符,划分成k段,且当前A串这个字符不取的情况下的方案数. f[i][j][k][1]则表示A的前i个字符匹配B的前j个字符,划分成k段,且当前A串这个字符取的情况下的方案数. 容易得出,$f[i][j][k…
前期准备: x64 ubuntu 镜像.vmware.ss账号 注意一定要有64位镜像! ss不是必须的,不过没有的话就等着下载一晚上吧... 首先先装好ubuntu,我装的是ubuntu-16.04-desktop-amd64.iso. 然后先换个软件源 装docker 然后主机打开ss,注意勾选允许局域网连接. 然后看一下主机ip 把uoj的包下下来(https://github.com/vfleaking/uoj) 设置docker的代理:https://docs.docker.com/e…
http://uoj.ac/problem/35 以前做后缀数组的题直接粘模板...现在重新写一下模板 注意用来基数排序的数组一定要开到N. #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 100003; int t1[N], t2[N], c[N]; void st(int *x, int *y, int *sa, int n, int…
http://uoj.ac/contest/35/problem/246 神奇!我这辈子是想不出这样的算法了. 对区间长度分类讨论:题解很好的~ 我已经弱到爆了,看完题解后还想了一晚上. 题解中"利用\(r_y\)进行计算更新答案"的具体方法是记录以当前点为右端点,任意两个数的差值的最小值大于等于j的区间的左端点,记为\(pos_j\). 就这个问题我想了一晚上啊TWT,我不滚粗谁滚粗QAQ #include<cmath> #include<cstdio> #i…
http://uoj.ac/contest/35/problem/244 对其他人来说好简单的一道题,我当时却不会做TWT 注定滚粗啊 题解很好的~ #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; const int N = 100003; ll in() { ll k = 0, fh = 1; char c= getcha…
http://www.lydsy.com/JudgeOnline/problem.php?id=3051 http://uoj.ac/problem/57 这道题需要平面图转对偶图,点定位,最小生成树上的倍增(NOIP2013火车运输)3个步骤. 最后一个很简单了,前两个比较麻烦.. 点定位可以用玄学的梯形剖分(并不会orz),但这里可以离线用扫描线,类似圆的异或并那道题. 平面图转对偶图要把一条边拆成两条有向边,把每条有向边找出和它夹角最小的,这个过程要........ 算了不说了,网上的题解…
http://uoj.ac/problem/13 建立trie树,然后建立go指针, 和AC自动机里的fail指针差不多, 走到一个快捷方式就从go指针走. 注意在trie树上要保留字符'/',不能用end标记来标识一个字符串的结束. 因为可能出现"/Iam/zz"和"/Iamzz"这两种情况,如果只用end标记,tire树上这两个字符串就会共用一条路径. (总之是蒟蒻才会犯的错误,神犇们勿喷_(:з」∠)_) #include<cstdio> #inc…
http://uoj.ac/problem/14 题解很好的~ 不带路径压缩的并查集能保留树的原本形态. 按秩合并并查集可以不用路径压缩,但是因为此题要删除,如果把深度当为秩的话不好更新秩的值,所以把子树大小当为秩. 合并直接合并,删除直接删除,每条边只会被添加进树一次,至多被删除一次. 离线特殊考虑一下return的情况就可以了QwQ #include<cstdio> #include<cstring> #include<algorithm> using namesp…