P2679 子串
Posted sfwr-you
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P2679 子串相关的知识,希望对你有一定的参考价值。
——————————————————————————————————————————————————
成功推错方程//哭泣
一开始选择的思路是用ai与bj相等时去找a中与bj-1相等的a并累加,在顺手求一个前缀和优化
但由于想本题的时间太过久远,许多细节想不起来了,而起初值与终值也找不到
采用的题解中的连续增长,加入常规的0/1表示末尾为是否被使用
#include<bits/stdc++.h> using namespace std; const int mds=1000000007; int n,m,k,f[2][201][201][2],cnt; char a[1100],b[1100]; int main() cin>>n>>m>>k>>a+1>>b+1; for(int i=1;i<=n;i++) int now=i%2,last=(i-1)%2; f[now][1][1][0]=cnt; if(a[i]==b[1])f[now][1][1][1]=1,cnt++; else f[now][1][1][1]=0; for(int j=2;j<=m;j++) for(int p=1;p<=k;p++) f[now][j][p][0]=(f[last][j][p][1]+f[last][j][p][0])%mds; f[now][j][p][1]=(a[i]==b[j])*((f[last][j-1][p-1][1]+f[last][j-1][p-1][0])%mds+f[last][j-1][p][1])%mds; cout<<(f[n%2][m][k][1]+f[n%2][m][k][0])%mds;
使用now与last后,初值就麻烦一点了,显然当i不选时,之前所有与b1相等的数量就是方案数,i选时则判断后确定0/1即可
方程②中的三项为选i-1并相连,不相连,及不选择i-1
以上是关于P2679 子串的主要内容,如果未能解决你的问题,请参考以下文章