上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 53 下一页
摘要: fft 搞一个生成函数 对于每位A(j)=Σi=1->m (a[i]-b[i+j])^2*a[i]*b[i+j] 如果A(j)=0说明这位匹配 如果这位是*那么a[i]=0否则等于字母-'a'+1,b也是这样构造 然后我们翻转a串就可以加速了 #include<bits/stdc++.h> usin 阅读全文
posted @ 2017-12-15 15:42 19992147 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 上次学fft还是5月份,昨天发现已经忘记怎么推导了,代码也看不懂了,就又学习了一发,大概是看menci的博客 0.fft可以进行多项式乘法,朴素的乘法跟手算一样是O(n^2),fft可以通过分治做到nlogn 1.点值表示:首先我们平常看见的多项式都是系数表示,类似于a0+a1*x^1+a2*x^2 阅读全文
posted @ 2017-12-15 09:24 19992147 阅读(248) 评论(0) 推荐(0) 编辑
摘要: AC自动机+状压dp 多串匹配要想ac自动机 dp[i][S]表示在i状态选中S 转移就用bfs,每个点通过fail收集信息,不要忘记通过fail传递 昨天搞不明白为什么自动机每次只可以转移儿子,不可以转移fail,问了问大概知道因为儿子是最长的后缀,包含的信息最多,包含了其他fail的信息,就相当 阅读全文
posted @ 2017-12-15 07:50 19992147 阅读(215) 评论(0) 推荐(0) 编辑
摘要: K短路 和超级钢琴之类的差不多 先反图跑最短路,从原点向外拓展,每个点最多拓展k次,否则不可能是k短路 #include<bits/stdc++.h> using namespace std; typedef pair<int, int> pii; const int N = 1e4 + 5, in 阅读全文
posted @ 2017-12-15 07:45 19992147 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 后缀自动机+manacher 听说本质不同的回文串只有O(n)个 那么用manacher求出所有回文串,然后在sam上查找出现了几次就行了 sam的性质又忘了。。。 manacher也忘了。。。 #include<bits/stdc++.h> using namespace std; const i 阅读全文
posted @ 2017-12-14 10:29 19992147 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 斯坦纳树 比之前要求高了一些 其实利用斯坦纳树的dp[i][s]以i为根,S为状态就行了,先跑一遍斯坦纳树,预处理出dp数组,记住每个S的最小值,然后再dp,这里dp必须要求同一种颜色的状态都必须在S里,然后跑枚举子集就行了 #include<bits/stdc++.h> using namespa 阅读全文
posted @ 2017-12-14 10:27 19992147 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 树形dp+第二类斯特林数 又是这种形式,只不过这次不用伯努利数了 直接搞肯定不行,我们化简一下式子,考虑x^n的组合意义,是把n个物品放到x个箱子里的方案数。那么就等于这个i=1->n,sigma(s[n,i]*A(x,i)),就是枚举要分成几组,这个用斯特林数算,然后把这些组放进箱子里,那么就是A 阅读全文
posted @ 2017-12-14 10:24 19992147 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 状压dp+斯坦纳树 原先就想过这个问题 其实就是spfa优化dp,跟3875很像 有两种转移方式,一种是枚举子集,另一种是拓展新的点,每次我们先枚举子集更新,再spfa更新dp,就是拓展新的点 #include<bits/stdc++.h> using namespace std; const in 阅读全文
posted @ 2017-12-13 19:44 19992147 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 伯努利数 这个是答案 其中的b是伯努利数,可以n^2预处理 伯努利数n^2递推 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 2e3 + 5, mod = 1e9 + 7; ll n, 阅读全文
posted @ 2017-12-12 21:53 19992147 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 容斥原理 看见恰好k个就要容斥 g[i]表示有几个b比a小 dp[i][j]表示前i个数至少有j个大的方案数,dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*(g[i]-j+1),就是可以不匹配,或者在剩下的g[i]-j+1选一个 然后就是容斥了,那个系数搞的不是很清楚,和spri 阅读全文
posted @ 2017-12-12 09:47 19992147 阅读(161) 评论(0) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 53 下一页