博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P4591 [TJOI2018]碱基序列 【KMP + dp】
阅读量:4949 次
发布时间:2019-06-11

本文共 1576 字,大约阅读时间需要 5 分钟。

题目链接

题解

\(f[i][j]\)表示前\(i\)个串匹配到位置\(j\)的方案数,匹配一下第\(i\)个串进行转移即可

本来写了\(hash\),发现没过,又写了一个\(KMP\),依旧\(WA\),无奈去翻题解,竟然要取模??!!

题面怎么不讲啊,,

#include
#include
#include
#include
#include
#include
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)#define REP(i,n) for (int i = 1; i <= (n); i++)#define mp(a,b) make_pair
(a,b)#define cls(s) memset(s,0,sizeof(s))#define cp pair
#define LL long long intusing namespace std;const int maxn = 10005,maxm = 100005,INF = 1000000000,Mod = 1000000007;inline int read(){ int out = 0,flag = 1; char c = getchar(); while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();} while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();} return out * flag;}char s[maxn],P[maxn];int len,K,m,nxt[maxn];LL f[105][maxn];void getf(){ nxt[1] = 0; for (int i = 1,j = 0; i < m; i++){ while (j && P[i + 1] != P[j + 1]) j = nxt[j]; if (P[i + 1] == P[j + 1]) nxt[i + 1] = ++j; }}int main(){ K = read(); scanf("%s",s + 1); len = strlen(s + 1); for (int i = 0; i <= len; i++) f[0][i] = 1; for (int i = 1; i <= K; i++){ int a = read(); while (a--){ scanf("%s",P + 1); m = strlen(P + 1); getf(); int j = 0; for (int k = 1; k <= len; k++){ while (j && P[j + 1] != s[k]) j = nxt[j]; if (P[j + 1] == s[k]) j++; if (j == m){ f[i][k] = (f[i][k] + f[i - 1][k - m]) % Mod; } } } } LL ans = 0; for (int i = 0; i <= len; i++) ans = (ans + f[K][i]) % Mod; printf("%lld\n",ans); return 0;}

转载于:https://www.cnblogs.com/Mychael/p/9051286.html

你可能感兴趣的文章
openfire连接登陆优化方案
查看>>
教你用笔记本破解无线路由器password
查看>>
Opencv学习笔记(六)SURF学习笔记
查看>>
在Linux系统下运行微信Web开发者工具
查看>>
AngularJS入门——hello world!
查看>>
关于:清除并发请求和(或)管理器数据 请求的理解
查看>>
防止手机游戏衰老的方法
查看>>
cocos2d-x中有一个JniHelper类详细使用
查看>>
IE6 PNG图片不透明的解决方案-tinypng
查看>>
消息系统设计------Part1
查看>>
C++复现经典游戏——扫雷
查看>>
Eclipse中支持js提示
查看>>
电子书下载:The C# Programming Language, 4th Edition
查看>>
linux 自动执行 crontab学习笔记 (转载)
查看>>
CSS选择器优先级
查看>>
Why Every Professional Should Consider Blogging
查看>>
第四次作业
查看>>
线性表的静态单链表存储结构
查看>>
我的三个“好朋友”-吕中琪
查看>>
python自带的进程池及线程池
查看>>