阅读 187

牛客多校第五场D Double Strings

牛客多校第五场D Double Strings

题意: 给定两个字符串A,B求长度相同的AB子串,使得子串的前面部分相等,且第一个不相等的位置B>A。求这样的子串个数

场上把两个DP写反了,应该先求前面部分相等的种数,再对于后半部分的大于DP

思路:f[i][j]表示A的前i个字符与B的前j个字符能组成多少相等的子串。

若AB不相等,f[i][j]=f[i--1][j]+f[i][j-1]-f[i-1][j-1];

若AB相等,f[i][j]额外加上f[i-1][j-1],表示一定带有当前这两个字符的相等子串

求完f之后再利用f求解

dp[i][j]表示A前i个字符与B前j个字符的解数。

dp[i][j]=dp[i-1][j]+dp[i][j-1]   (原来一直觉得这里要减掉一个dp[i-1][j-1]后来问了别人才知道因为这里如果前面i-1,j-1的子串是符合条件的,那么这里i与j无论放什么都没有关系,所以还要加回去,就正好抵消了)

如果b[j]>a[i] dp[i][j]额外加上f[i-1][j-1]

下附代码:

 View Code

服务器评测 http://www.cncsto.com/ 

服务器测评 http://www.cncsto.com/ 

站长资源 https://www.cscnn.com/ 


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐