当前位置:网站首页>(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;
}边栏推荐
- (POJ - 3685) matrix (two sets and two parts)
- C basic grammar
- Codeforces Round #803 (Div. 2)A~C
- 拉取分支失败,fatal: ‘origin/xxx‘ is not a commit and a branch ‘xxx‘ cannot be created from it
- b站 實時彈幕和曆史彈幕 Protobuf 格式解析
- QT simulates mouse events and realizes clicking, double clicking, moving and dragging
- B - Code Party (girls' competition)
- Frida hook so layer, protobuf data analysis
- Programmers, what are your skills in code writing?
- Study notes of Tutu - process
猜你喜欢

Li Kou: the 81st biweekly match

“鬼鬼祟祟的”新小行星将在本周安全掠过地球:如何观看

Pyside6 signal, slot

860. Lemonade change

Programmers, what are your skills in code writing?

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

Codeforces Round #801 (Div. 2)A~C

1605. Sum the feasible matrix for a given row and column

It is forbidden to trigger onchange in antd upload beforeupload

1903. Maximum odd number in string
随机推荐
Specify the format time, and fill in zero before the month and days
B - Code Party (girls' competition)
Codeforces - 1526C1&&C2 - Potions
Truck History
Date plus 1 day
Li Kou - 298th weekly match
TCP's three handshakes and four waves
Acwing: the 56th weekly match
QT implementation fillet window
Pyside6 signal, slot
QT realizes window topping, topping state switching, and multi window topping priority relationship
b站 實時彈幕和曆史彈幕 Protobuf 格式解析
AcWing——第55场周赛
Vs2019 initial use
Acwing: Game 58 of the week
Pytorch extract skeleton (differentiable)
力扣:第81场双周赛
QT实现圆角窗口
Some problems encountered in installing pytorch in windows11 CONDA
Ball Dropping