首页 > 编程知识 正文

动态规划法求解最长公共子序列,动态规划01背包问题

时间:2023-05-04 06:15:43 阅读:136030 作者:3055

主题说明你要做的就是写一个程序,给出最长的公共子序列。

最长公共子串也称为最长公共子串,它不必是连续的。 在英语中简称为LCS(Longestcommonsubsequence )。 这定义了一个序列s分别是2个以上已知序列的子序列,在满足该条件的所有序列中最长时,s被称为已知序列的最长公共子序列。

在第一行中,输入整数n(0n100 )以表示要测量的数据集的数量

然后,各组的数据有两行,分别是要测量的两组字符串。 每个字符串的长度不超过1000。

每组输出测试数据输出一个表示最大公共子序列长度的整数。 每组的结果占一行。

示例输入2asdfadfsd123abcabc123abc示例输出36 # include iostream # include cstring # include algorithm # include cstdio # include limits . intjudge(intstart,int End,char*s,char c,int*Position ) for(intI=start; i=End; I () if ) c==s[I] ) {*Position=i; 返回1; }}return 0; (}int main ) ) {int k,t,a[100]; char s1[100],s2[100]; wile(Scanf('%d ',t )!=EOF () while(t-- ) scanf ) ' %s%s ',s1,s2 ); memset(DP,0,sizeof ) DP ); int c=0; intlen1=Strlen(S1; intlen2=Strlen(S2; while(Clen2s1[0]!=s2[c ]; if(c==len2) {a[0]=len2 - 1; dp[0]=0; }else{ a[0]=c-1; dp[0]=1; }for(intI=1; i len1; I ) {int Position,Max=-1; for(intk=0; k i; k ) {intnum=DP[k]judge(a[k],len2,s2,s1[i],Position ); if(nummax ) {Max=num; }}dp[i]=Max; a[i]=Position; }printf('%d(n ),dp[len1 - 1]; }}return 0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。