代码(记忆化搜索)
搜索部分:
int dfs(int i,int j,int num)
{
if(j==1 ) return num==1?1:0;
if(f[i][j][num]) return f[i][j][num];
for(int l=i-1;l>0;l--)
{
if(a[l]==b[j-1])
{
f[i][j][num]+=dfs(l,j-1,num-1)+dfs(l,j-1,num);
}
if(a[l]==b[j])
{
f[i][j][num]+=dfs(l,j,num);
}
}
return f[i][j][num];
}
主函数:
for(int i=1;i<=n;i++)
{
if(a[i]==b[m])
{
ans+=dfs(i,m,k);
}
}