【正经题解】子串
2024-02-20 17:08:45
发布于:浙江
12阅读
0回复
0点赞
用sum处理了一下,然后可以滚动掉一维,于是成了2维11行dp
A' 表示由串A前i个字符组成的串
B' 表示由串B前j个字符组成的串
设f(i,j,k)为从A'中,顺序取k个不重复子串,首尾相接后与B'相等的方案数
#include<iostream>
long long f[201][201]={1},sum[201][201],n,m,ki;
char a[1001],b[201];
int main(){
std::cin>>n>>m>>ki>>a>>b;
for(int i=1;i<=n;i++)
for(int j=m;j>=1;j--)
for(int k=ki;k>=1;k--)
f[j][k]=(f[j][k]+ (sum[j][k]= a[i-1]==b[j-1]? sum[j-1][k]+f[j-1][k-1] : 0))%1000000007;
std::cout<<f[m][ki];
}
这里空空如也
有帮助,赞一个