zoj2744 Palindromes 字符串的题

博客讲述了如何利用动态规划解决ZOJ2744题目的回文子串计数问题。由于数据范围较小,可以采用O(N*N)的时间复杂度,博主给出了暴力枚举中点和动态规划两种方法。动态规划中,通过滚动数组优化内存,并结合标记技巧避免使用额外数组。博主还分享了一位同学的更快速但稍复杂的DP解决方案,强调了滚动数组、优化技巧和记忆化搜索的重要性。
摘要由CSDN通过智能技术生成

题意是求给一个字符串算出其中有多少个回文子串(每个回文子串必须是连续的),关于这题由于数据范围才5000,所以可以用O(N*N)的动态规划去做或者是用暴力的搜索,每次枚举回文串的对称中点复杂度不超过O(N*N),但是用dp做就很蛋疼了,因为内存限制存不了所有的状态,所以得用滚动数组去存,下面将给出几种不同实现的代码。如果暴力枚举中点方法确实很简单,但我还是建议,写一下dp,/可以锻炼一下代码能了,或者说是扩展一下思维吧  这题有成型的算法是MANACHER算法。。

***********************************************************

强烈建议看一下这题,也是回文串不过就只能dp了点击打开链接,dp的状态转移方程十分相似,但难度不一样

*************************************************************

我的动态规划代码,因为这题和我前不久做过的一题很像,所以就套用了一下思路,写了一个dp式 dp[i][j]=dp[i][j-1]+dp[i+1][j]-dp[i+1][j-1] ,另外如果从i到j的子串也是回文串则dp[i][j]+=1;dp[i][j] 表示从i到j内有多少个满足的回文子串。举例,如ch[10000]=asa则dp[0][1] 的值是2,有a和s 2个回文子串 又dp[1][1]=1,dp[1][2]=2且 ch[0]=ch[2]同时有ch[1]到ch[1]也是回文子串     所以 d[0][2]=dp[0][1]+dp[1][2]-dp[1][1]+1=4

强烈建议看一下这题,也是算回文串不过就只能dp了点击打开链接

有了这个递推式要是写记忆化搜索是很快的,于是我就有了如下代码(别急着ctrl+c 代码不会AC的)

#include <cstdio>
#include<cstring>
#in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值