题意简述
给定两个字符串 A , B A,B A,B,保证 A A A比 B B B长,在 A A A中取出 k k k个不重叠的子串,使得顺序拼起来能得到 B B B,有多少不同的方案?(相同的子串从不同的位置被取出来也是不同的方案)。
PS:复杂度最高是 O ( A ∗ B 2 ) O(A*B^2) O(A∗B2),因为这个值约等于 4 ∗ 1 0 8 4*10^8 4∗108,所以不能带 l o g log log。
思路
很明显要 D P DP DP,因为计数题的方法也没几个,
- DP
- 数据结构优化暴力
- 组合数学
显然,2. 不行(至今没有数据结构能维护这个),3. 不会(太难了,像我会一样),只能考虑一下1。1虽然很难,但是从可做性来讲,只有这个了。
那么如何设状态呢?(千万不要怂,尽管开空间,到时候会优化的)
考虑设 d p [ i ] [ j ] [ k ] dp[i][j][k] dp[i][j][k]表示 A A A中前 i i i个位置,匹配到 B B B的前 j j j个位置,用了 k k k个子串。那么我们有转移:
d p [ i ] [ j ] [ k ] = d p [ i − 1 ] [ j − 1 ] [ k − 1 ] + d p [ i − 1 ] [ j − 1 ] [ k ] dp[i][j][k]=dp[i-1][j-1][k-1]+dp[i-1][j-1][k] dp[i][j][k]=dp[i−1][j−1][k−1]+dp[i−

博客介绍了洛谷第2679题的解题方法,主要涉及字符串处理和动态规划。题目要求在长字符串A中找到k个不重叠子串,使得这些子串顺序拼接能组成字符串B。由于状态转移方程,作者提出使用动态规划(DP)来解决,并讨论了数据结构优化和状态设计,以及如何处理边界条件和滚动数组的空间优化技巧。
最低0.47元/天 解锁文章
575

被折叠的 条评论
为什么被折叠?



