编辑距离(线性DP+暴力匹配)

Posted MangataTS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编辑距离(线性DP+暴力匹配)相关的知识,希望对你有一定的参考价值。

题目链接

https://www.acwing.com/problem/content/901/

思路

其实这一道题的思路和上一道题是一样的,只不过我们对于每一次询问需要做n次匹配判断,如果当前的操作次数低于k那么说明我们这个字符串是合法的,关于怎么匹配俩字符串的最低花费次数,我们可以上一篇:最小编辑距离

代码

#include<bits/stdc++.h>
using namespace std;

const int N = 1e3+10;

int n,m;
char a[N][15],b[20];
int f[20][20],la[N];


int main()

	cin>>n>>m;
	for(int i = 1;i <= n; ++i) 
		cin>>(a[i]+1);
		la[i]=strlen(a[i]+1);
	
	while(m--)
		int cnt;
		cin>>(b+1)>>cnt;
		int lb = strlen(b+1);
		int ans = 0;
		for(int i = 1;i <= n; ++i) 
			//初始化
			for(int j = 0;j <= la[i]; ++j) f[j][0] = j;
			for(int j = 0;j <= lb; ++j) f[0][j] = j;

			for(int j = 1;j <= la[i]; ++j)
				for(int k = 1;k <= lb; ++k)
				f[j][k] = min(f[j-1][k]+1,f[j][k-1]+1);
				if(a[i][j] == b[k]) f[j][k] = min(f[j-1][k-1],f[j][k]);
				else f[j][k] = min(f[j-1][k-1] + 1,f[j][k]);
			
			if(f[la[i]][lb] <= cnt) ans++;
		
		cout<<ans<<endl;
	
	return 0;


以上是关于编辑距离(线性DP+暴力匹配)的主要内容,如果未能解决你的问题,请参考以下文章

72. 编辑距离困难线性DP

DP问题从入门到精通2.2(线性DP,最短编辑距离)

DP问题从入门到精通2.2(线性DP,最短编辑距离)

DP问题从入门到精通2.2(线性DP,最短编辑距离)

动态规划线性dp问题总结:数字三角形最长上升子序列最长公共子序列最短编辑距离 题解与模板

最小编辑距离dp