题目的匹配应该也要看成一个文本串与另一个模式串的匹配过程

Text是以当前i结尾的后缀来匹配Pattern的前缀(非真)

这里的Pattern肯定是可以匹配成功的,直接由next来保证(next总是当前结尾的最大前缀,恰好满足递推的需要)

(说的不是很准确,就是kmp匹配过程时使用的方法)

举个栗子:

a b a b a c b a

0 0 1 2 3 0 0 1 next

1 1 1 1 1 1 1 1 dp 初始合法状态

1 1 2 2 3 1 1 2 dp 最终计算结果

dp[1] = 1+dp[next[1]] :
Text a
Pattern a
dp[2] = 1+dp[next[2]]:
Text ab
Pattern ab
dp[3] = 1+dp[next[3]] = 1+dp[1]:
Text aba
Pattern aba a
dp[4] = 1+dp[2]:
Text abab
Pattern abab ab
dp[5] = 1+dp[3]:
Text ababa
Pattern ababa aba a
....
dp[8] = 1+dp[1]:
Text ababacba
Pattern ababacba a

最终统计得到

4 a

2 ab

2 aba

1 abab

1 ababa

1 ababac

1 ababacb

1 ababacba

这种以【当前状态】来转换角度的统计方法值得学习

所以说动态规划天下第一(明明是递推

/*H E A D*/
int nxt[maxn];
char P[maxn];
int dp[maxn];//dp[i]:P[i]结尾的子串所含满足匹配的前缀的个数
void buildNext(){
nxt[1]=0;
int j=0;
int m=strlen(P+1);
rep(i,2,m){
while(j>0&&P[i]!=P[j+1]) j=nxt[j];
if(P[i]==P[j+1]) j++;
nxt[i]=j;
dp[i]=1+dp[j];
}
}
int main(){
int t=read();
while(t--){
int n=read();
s1(P);
dp[0]=0;
rep(i,1,n) dp[i]=1;
buildNext();
ll sum=0;
rep(i,1,n) sum=(sum+dp[i])%10007;
println(sum);
}
return 0;
}

HDU - 3336 next运用+递推的更多相关文章

  1. HDU 2085 核反应堆 --- 简单递推

    HDU 2085 核反应堆 /* HDU 2085 核反应堆 --- 简单递推 */ #include <cstdio> ; long long a[N], b[N]; //a表示高能质点 ...

  2. HDU 5860 Death Sequence(递推)

    HDU 5860 Death Sequence(递推) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5860 Description You ...

  3. hdu 2604 Queuing(dp递推)

    昨晚搞的第二道矩阵快速幂,一开始我还想直接套个矩阵上去(原谅哥模板题做多了),后来看清楚题意后觉得有点像之前做的数位dp的水题,于是就用数位dp的方法去分析,推了好一会总算推出它的递推关系式了(还是菜 ...

  4. HDU 2154 跳舞毯 | DP | 递推 | 规律

    Description 由于长期缺乏运动,小黑发现自己的身材臃肿了许多,于是他想健身,更准确地说是减肥. 小黑买来一块圆形的毯子,把它们分成三等分,分别标上A,B,C,称之为“跳舞毯”,他的运动方式是 ...

  5. hdu 5950 Recursive sequence 递推式 矩阵快速幂

    题目链接 题意 给定\(c_0,c_1,求c_n(c_0,c_1,n\lt 2^{31})\),递推公式为 \[c_i=c_{i-1}+2c_{i-2}+i^4\] 思路 参考 将递推式改写\[\be ...

  6. HDU 5950 Recursive sequence 递推转矩阵

    Recursive sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  7. hdu 5860 Death Sequence(递推+脑洞)

    Problem Description You may heard of the Joseph Problem, the story comes from a Jewish historian liv ...

  8. HDU 2563 统计问题(递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=2563 将向上移的步数设为a[n],将向左右移的步数设为b[n],有a[n]=a[n-1]+b[n-1 ...

  9. hdu 2571 命运(递推,请小心)

    题目 //不能广搜,会超内存//可以用dp思想模拟//map 后来保存的是 保存由前面推来的最大的幸运总值的点//下标从1开始,不然倍数会有问题 //AC 代码: AC代码 //不能广搜,会超内存 / ...

随机推荐

  1. rosbag数据记录及转换图片、视频

    博客转载自: https://blog.csdn.net/u012706484/article/details/78495896 rosbag常见的使用参数和配置 1.查看.bag中包含的信息 : r ...

  2. 7.内网渗透之windows认证机制

    文章参考自三好学生域渗透系列文章 看了内网渗透第五篇文章,发现如果想要真正了解PTT,PTH攻击流程,还需要了解windows的认证机制,包括域内的kerberos协议. windows认证机制 在域 ...

  3. web大文件上传控件-监控fd_create流程-Xproer.HttpUploader6

      监控fd_create流程 1.打开ie,f12 2.启动网络监控 点击开始捕获 上传文件夹,然后查看监控 将监控信息转到详细视图

  4. wpf附加属性理解

    WPF附加属性 http://www.cnblogs.com/tianyou/archive/2012/12/27/2835670.html WPF属性(二)附加属性 http://blog.csdn ...

  5. asp.net 中input radio checked 无效

    把Jq代码中的$(...).attr("checked",true) 换成$(...).prop("checked",true) ,

  6. 从头开始学eShopOnContainers——Visual Studio 2017环境配置

    一.安装和配置Docker环境 1.安装Docker CE for Windows 从官方网站下载并安装,https://docs.docker.com/docker-for-windows/inst ...

  7. linux 建议锁和强制锁

    作为APUE 14.3节的参考 linux是有强制锁的,但是默认不开启.想让linux支持强制性锁,不但在mount的时候需要加上-o mand,而且对要加锁的文件也需要设置相关权限. .       ...

  8. SMS106 短信验证码接口测试

    SMS106  短信验证码接口测试 一.什么是SMS106: 106短信通道是指仅中国移动.中国联通提供的网关短信平台,实现与客户指定号码进行短信批量发送和自定义发送的目的,即你收到的短信在手机上以1 ...

  9. cdq分治略解

    前言 陌上花开,可缓缓归矣                         --吴越王 寓意:意思是:田间阡陌上的花开了,你可以一边赏花,一边慢慢回来. 隐意:春天都到了,你怎么还没有回来.形容吴越王 ...

  10. ubuntu14.10,解决按照最新版Gnome 15.10后,经典Gnome桌面字体问题!

    ubuntu14.10刚安装完毕,我首先按照了经典Gnome桌面,随后我发现ubuntu软件中心里面能找到的软件明显不如先前我安装过的ubuntu了,我觉得有可能是因为我以前安装的ubuntu14.1 ...