正解:kmp+dp+矩阵优化

解题报告:

传送门!

啊刚说想做矩阵优化dp的字符串题就找到辣QwQ虽然不是AC自动机的但都差不多嘛QwQ

首先显然可以想到一个dp式?就f[i][j]:凑出i位了,在s串中匹配到了第j位

接着依然很显然地可以想到要转移就要求下kmp

所以就求个kmp,就能得到转移式:f[i+1][nxt[(j,d)]]+=f[i][j]

哦解释下nxt[(j,d)],就这儿显然要枚举填哪一个数d然后从j一直跳一直跳跳到匹配位置的嘛,所以我这个的意思是说第j位是d的匹配位置,我知道挺无厘头的,但这么写就很简单就这么写算了QwQ

这样复杂度就,O(10*n*m)的,显然过不去

所以考虑优化

首先这个方程这么写就不太好看,,,所以先转化下好了QAQ

因为是一直跳一直跳,所以可以先预处理一个a[i][j]:第i位的后面选j会跳到的位置,显然O(m2)(事实上并没有到,,,?)地处理下就好

然后转移就变成了这个样子:f[i+1][a[i][j]]=(f[i][j]+f[i+1][a[i][j]])%mod

啊其实依然不太好转移,,,所以再进一步转化下QwQ

首先从上面那个可以得到每个点从哪儿转移来什么的都是固定的对趴,所以依然是预处理,只是预处理的对象变了,成了g[i][j]:已经匹配了i位了,有几种选择方案的结果是匹配了j位,这显然和上面的a一样是可以很快地做掉的

然后转移就变成了这个样子:f[i][j]=f[i-1][j]*g[j][k]

然后如果把f[i]当做一个j*1的矩阵,转移就变成了F[i]=F[i-1]*G,然后就矩阵快速幂跑一遍就欧克了!

over等下放代码QAQ

洛谷P3193 [HNOI2008]GT考试 kmp+dp的更多相关文章

  1. 【KMP】【矩阵加速】【递推】洛谷 P3193 [HNOI2008]GT考试 题解

        看出来矩阵加速也没看出来KMP…… 题目描述 阿申准备报名参加 GT 考试,准考证号为\(N\)位数\(X_1,X_2…X_n(0\le X_i\le9)\),他不希望准考证号上出现不吉利的数 ...

  2. 洛谷P3193 [HNOI2008]GT考试(KMP,矩阵)

    传送门 大佬讲的真吼->这里 首先考虑dp,设$f[i][j]$表示长串匹配到第$i$位,短串最多匹配到$j$位时的方案数 那么答案就是$\sum_{i=0}^{m-1}f[n][i]$ 然后考 ...

  3. 洛谷P3193 [HNOI2008]GT考试(dp 矩阵乘法)

    题意 题目链接 Sol 设\(f[i][j]\)表示枚举到位置串的第i位,当前与未知串的第j位匹配,那么我们只要保证在转移的时候永远不会匹配即可 预处理出已知串的每个位置加上某个字符后能转移到的位置, ...

  4. [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂)

    [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂) 题面 阿申准备报名参加GT考试,准考证号为N位数X1X2-.Xn,他不希望准考证号上出现不吉利的数字.他的不吉利数学A ...

  5. 洛谷P4591 [TJOI2018]碱基序列 【KMP + dp】

    题目链接 洛谷P4591 题解 设\(f[i][j]\)表示前\(i\)个串匹配到位置\(j\)的方案数,匹配一下第\(i\)个串进行转移即可 本来写了\(hash\),发现没过,又写了一个\(KMP ...

  6. [BZOJ1009] [HNOI2008] GT考试 (KMP & dp & 矩阵乘法)

    Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字. 他的不吉利数学A1A2...Am(0< ...

  7. BZOJ.1009.[HNOI2008]GT考试(KMP DP 矩阵快速幂)

    题目链接 设f[i][j]为当前是第i位考号.现在匹配到第j位(已有j-1位和A[]匹配)的方案数 因为假如当前匹配j位,如果选择的下一位与A[j+1]不同,那么新的匹配位数是fail[j]而不是0, ...

  8. [BZOJ1009][HNOI2008]GT考试(KMP+DP)

    [不稳定的传送门 Solution dp[i][j]表示前i个字符当前匹配到不吉利串的第j个,即当前方案的后缀等于不吉利串前缀 然而由于n过大,不能直接转移,用矩阵优化 Code #include & ...

  9. P3193 [HNOI2008]GT考试(KMP+矩阵乘法加速dp)

    P3193 [HNOI2008]GT考试 思路: 设\(dp(i,j)\)为\(N\)位数从高到低第\(i\)位时,不吉利数字在第\(j\)位时的情况总数,那么转移方程就为: \[dp(i,j)=dp ...

随机推荐

  1. Mac 抓包工具wireshark使用

    共四部分 1.wireshark简介 2.wireshark mac版安装 3.wireshark 抓取普通http 4.高级应用 1.wireshark 简介(百度百科) Wireshark(前称E ...

  2. Vue:Vue2.0搭建脚手架

    随着Vue.js越来越火爆,更多的项目都用到Vue进行开发,在实际的开发项目中如何搭建脚手架呢?今天就来跟大家分享一下如何使用vue-cli搭建脚手架. 一.安装node.js 1.进入官网https ...

  3. Sword STL迭代器prev,next相关函数

    迭代器的头文件中定义了4个实现迭代器模板的函数模板. .advance(iterator,num):将迭代器iterator 移动了num个位置 .distance(iterator1,iterato ...

  4. python中的生成器函数是如何工作的?

    以下内容基于python3.4 1. python中的普通函数是怎么运行的? 当一个python函数在执行时,它会在相应的python栈帧上运行,栈帧表示程序运行时函数调用栈中的某一帧.想要获得某个函 ...

  5. Spring 源码学习:day1

    前言: 最近也不知道该忙些什么样的事情.便随便看看源码算了. 正文: (1) 在网上下载 Spring 的源码: 可以采用 git 方式下载 https://github.com/spring-pro ...

  6. 二、主流区块链技术特点及Hyperledger Fabric V0.6版本特点

    一.主流区块链技术特点 二.HyperLedger子项目 三.Hyperledger fabric架构 V0.6逻辑架构: V0.6区块链网络 对应的0.6版本的运行时架构: 0.6版本的架构特点是: ...

  7. websphere 删除文件

    META-INF 文件夹下加入ibm-partialapp-delete.props即可 里面添加路径 如WEB-INF/xxx/xxx.xxx

  8. AOP 切入点表达式

    8.切入点表达式 现在我们介绍一下最重要的切入点表达式: 如上文所说,定义切入点时需要一个包含名字和任意参数的签名,还有一个切入点表达式,就是* findById*(..)这一部分. 切入点表达式的格 ...

  9. vue分页组件

    <template> <div> <ul class="pagination"> <li @click="goTo(1)&quo ...

  10. solus 系统 - 安装 mariadb

    # 安装 mariadb(这个系统没有 mysql 库) $ sudo eopkg it mariadb $ sudo eopkg it mariadb-server # 初始化数据文件地址 $ su ...