当前位置:网站首页>(POJ - 1458) common subsequence (longest common subsequence)
(POJ - 1458) common subsequence (longest common subsequence)
2022-07-06 16:23:00 【AC__ dream】
Topic link :http://poj.org/problem?id=1458
The question : Give you two strings at a time , Find the length of the longest common subsequence
This is a template problem for finding the longest common subsequence , This model is classic , Let me introduce the solution of this problem
This problem is solved by dynamic programming , set up dp[i][j] Represents the first string i Characters and the first... Of the second string j The length of the longest common subsequence of characters , Now let's start to analyze the state transition
If s1[i]==s2[j] that dp[i][j]=dp[i-1][j-1]+1( The default is... In the first string i Characters and the second string Of the j Match characters )
If not satisfied s1[i]==s2[j], that dp[i][j]=max(dp[i-1][j],dp[i-1][j]), How to understand this equation , Imagine , If dp[i][j] The last bit in the longest public string of the contained result corresponds to s1[m] and s2[n], Then it must be satisfied m!=i perhaps n!=j, because s1[i]!=s2[j], Now if n!=j Well , Then there must be dp[i][j-1]=dp[i][j], Because at this time, the second string j Characters do not belong to the characters in the longest common subsequence , So there is dp[i][j-1]=dp[i][j], Similarly, you can get if m!=i, At this time there is dp[i-1][j]=dp[i][j], therefore dp[i][j]=max(dp[i-1][j],dp[i-1][j])
At this time, some students may have doubts , Why to be s1[i]==s2[j] when dp[i][j]=dp[i-1][j-1]+1, Don't dp[i-1][j-1]+1>=max(dp[i-1][j],dp[i-1][j]), In fact, this inequality is true , According to our definition of state, we can get dp[i-1][j-1]+1>=dp[i-1][j] as well as dp[i-1][j-1]+1>=dp[i][j-1], Therefore, the above inequality will hold
The implementation is relatively simple , Here is the code :
#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
const int N=1003;
char a[N],b[N];
int dp[N][N];//dp[i][j] Express a Middle front of string i Characters and b Middle front of string j The number of elements in the longest common subsequence of characters
int main()
{
while(scanf("%s%s",a+1,b+1)!=EOF)
{
int lena=strlen(a+1),lenb=strlen(b+1);
for(int i=1;i<=lena;i++)
for(int j=1;j<=lenb;j++)
{
if(a[i]==b[j])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
printf("%d\n",dp[lena][lenb]);
}
return 0;
}边栏推荐
- QT implementation window gradually disappears qpropertyanimation+ progress bar
- Basic Q & A of introductory C language
- 605. Planting flowers
- Problem - 1646C. Factorials and Powers of Two - Codeforces
- Share an example of running dash application in raspberry pie.
- Candy delivery (Mathematics)
- b站 實時彈幕和曆史彈幕 Protobuf 格式解析
- QT按钮点击切换QLineEdit焦点(含代码)
- Auto. Getting started with JS
- input 只能输入数字,限定输入
猜你喜欢

QT simulates mouse events and realizes clicking, double clicking, moving and dragging

921. Minimum additions to make parentheses valid

OneForAll安装使用

QT模拟鼠标事件,实现点击双击移动拖拽等

807. Maintain the urban skyline

TCP's three handshakes and four waves

Codeforces Round #802(Div. 2)A~D

Anaconda下安装Jupyter notebook

力扣:第81场双周赛

力扣——第298场周赛
随机推荐
Analyse du format protobuf du rideau en temps réel et du rideau historique de la station B
socket通讯
计算时间差
Click QT button to switch qlineedit focus (including code)
QNetworkAccessManager实现ftp功能总结
浏览器打印边距,默认/无边距,占满1页A4
Codeforces Round #802(Div. 2)A~D
Codeforces Round #803 (Div. 2)A~C
Discussion on QWidget code setting style sheet
Li Kou - 298th weekly match
Codeforces Round #798 (Div. 2)A~D
HDU - 6024 building shops (girls' competition)
QT实现窗口渐变消失QPropertyAnimation+进度条
Bidirectional linked list - all operations
Codeforces Round #797 (Div. 3)无F
Advancedinstaller安装包自定义操作打开文件
Kubernetes cluster deployment
Summary of FTP function implemented by qnetworkaccessmanager
What is the difficulty of programming?
OneForAll安装使用