题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5763

思路:dp[i]表示前i个字符组成的字符串所表示的意思数量,则当匹配时dp[i]=dp[i-1]+dp[i-lenb],不匹配时dp[i]=dp[i-1]。匹配的判断可以用KMP。

#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=1e5+3;
const int mod=1e9+7;
char a[N],b[N];
ll dp[N];
int lena,lenb,next[N];
void get_next()
{int j = 0 ,k = -1;next[0] = -1;while(j < lenb){if(k == -1 || b[j] == b[k]){j++,k++;next[j] = k;}else k = next[k];}
}
void kmp()
{get_next();int i = 0 ,j = 0;memset(dp,0,sizeof(dp));dp[0] = 1;while(i<lena){if(j == -1||a[i]==b[j]){i++;dp[i] = dp[i-1];j++;}else j = next[j];if(j == lenb){dp[i] = (dp[i-lenb] + dp[i]) % mod;j = next[j];}}
}
int main()
{int T,cas=1;scanf("%d",&T);while(T--){scanf("%s %s",a,b);lena=strlen(a),lenb=strlen(b);kmp();printf("Case #%d: %lld\n",cas++,dp[lena]);}return 0;
}

转载于:https://www.cnblogs.com/westwind1005/p/5975203.html

HDU5763 another meaning -(KMP+DP)相关推荐

  1. HDU5763 Another Meaning(KMP+dp)

    题意: 给你一个主串一个子串,然后主串中匹配到子串就可以把当前部分改为*, 问主串有多少中不同的样子 思路: 先KMP预处理主串中所有匹配到子串的末尾位置 然后用dp dp[N][2]只更新成功匹配的 ...

  2. 2017 Multi-University Training Contest - Team 4:1002. Classic Quotation(KMP+DP)

    题意:给你两个字符串S和T,每次询问(L, R)求出所有满足x<=L, y>=R的(x, y),S串的前x个字符和后y个字符接在一起后包含字符串T的个数之和 说实话..这题会做题解也还是看 ...

  3. hdu3689(kmp+dp)

    题意:问随机生成一个长度为m(m<=1000)长度的字符串,出现某个子串s的概率是多少. 解法:dp+kmp优化.ans[i][j]表示i长度,走到了s的j位置的概率,当然这是在i之前没有出现s ...

  4. HDU 3336 Count the string(KMP+DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3336 题意:给你一个字符串,计算其所有前缀在该字符串出现的次数的总和. 思路:next[j]=i,代表 ...

  5. Perfect service(树形dp)

    Perfect service(树形dp) 有n台机器形成树状结构,要求在其中一些机器上安装服务器,使得每台不是服务器的计算机恰好和一台服务器计算机相邻.求服务器的最小数量.n<=10000. ...

  6. 最大搜索二叉子树大小(树形dp)

    给定一颗二叉树的头节点head,返回这棵二叉树中最大的二叉搜索子树 (二叉搜索树:该二叉树中左子树所有节点比它小,右子树所有节点比它大 ): 思路: 这是一道分析可能性求解在二叉树上做类似动态规划的问 ...

  7. HDU 1520 Anniversary party(树形dp)

    HDU 1520 Anniversary party(树形dp) 树形dp第一题!!! 题意很清晰,思路也很明确.很容易找到根节点,即最大的boss,通过根节点向下dp. 状态转移方程: int to ...

  8. 「SDOI2016」储能表(数位dp)

    「SDOI2016」储能表(数位dp) 神仙数位 \(dp\) 系列 可能我做题做得少 \(QAQ\) \(f[i][0/1][0/1][0/1]\) 表示第 \(i\) 位 \(n\) 是否到达上界 ...

  9. 力扣- - 最短回文串(KMP算法)

    力扣- - 最短回文串(KMP算法) 文章目录 力扣- - 最短回文串(KMP算法) 一.题目描述 二.分析之KMP算法 1.暴力法 2.KMP算法 3.next数组求法1:暴力查找最长的前后缀 4. ...

最新文章

  1. 蓝桥杯-最短路(floyd算法)
  2. java的idea的使用_java学习-IDEA相关使用
  3. 对象androidandroid 开发中 如何取得ListView 的 每条Item 的对象
  4. python 线程 的类库_python类库32[多线程]
  5. 定向输出命令_数据流的世界,带你了解Linux重定向
  6. c 语言五子棋游戏代码,C语言案例:控制台版本的五子棋游戏【代码】
  7. linux下daemon守护进程的实现(以nginx代码为例)
  8. 属于微型计算机主要性能指示,2014年兰大入学测试题--计算机基础
  9. Install Rouge and Pyrouge for python 2.7 (conda virtual env) on Linux 64
  10. 滴滴柳青探望被害司机家属;支付宝信用卡还款收费;ofo 查处 8 起贪腐案件 | 极客头条...
  11. 两轮差速机器人坐标系及运动轨迹描述
  12. 三维点云数据处理软件供技术原理说明_十大点云数据处理技术梳理
  13. 基于C# winform的操作系统课程设计:SPOOLING假脱机输入输出技术模拟
  14. 2021招银网络提前批笔试编程题C++
  15. (转载)总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法...
  16. SQL 实验项目5_触发器
  17. 自定义ro.build.fingerprint
  18. 微积分小课堂:微分(从宏观变化了解微观趋势)
  19. 其他——调试时chrom崩溃
  20. 医疗人工智能适逢其时 信息通信网络赋能千行百业

热门文章

  1. android 分享qq微信朋友圈,H5微信JS-SDK实现分享朋友 朋友圈以及QQ自定义分享
  2. python坐标轴拉伸_python-Matplotlib垂直拉伸histogram2d
  3. php验证码显示碎图片,我的验证码只显示破碎的小图片
  4. xml格式的word转为标准格式_保持的怎么保证Word格式不变?4个技巧需要带走
  5. python gzip压缩_Python gzip –压缩解压缩
  6. java静态构造函数_为什么不允许使用Java静态构造函数?
  7. java实例摘要(四)
  8. 什么是接口?如何定义接口?如何实现接口?
  9. Manage,管道的简单应用,进程池,队列的简单应用
  10. 用mobiscroll.js的treelist实现弹出下拉效果