Tyvj 1050 最长公共子序列

本文深入探讨了Tyvj1050中的最长公共子序列问题,提供了算法思路及实现细节,包括动态规划方法和具体代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

 最长公共子序列

来源:

 Tyvj 1050

题目大意:

 一行两个用空格隔开的字符串,求其最长公共子序列

数据范围:

 两个串的长度均小于2000

样例:

 abccd aecd

3

做题思路:

 While读到空格,然后结束一个,另一个开始然后动规

 f[i,j]=  f[i-1,j-1]+1;( s1[i]=s2[j])

       max(f[i-1,j],f[i,j-1])

知识点:

 动态规划、最长公共子序列

var
 i,j,m,n:longint;
 x,y:array[1..3000]of char;
 f:array[0..3000,0..3000]of longint;
begin
 i:=1;
 read(x[1]);
 while x[i]<>' ' do{<读入第一个字符串>}
 begin
  inc(i);
  read(x[i]);
 end;
 dec(i);
 while not eoln do{<读入第二个字符串>}
 begin
  inc(j);
  read(y[j]);
 end;
 m:=i;n:=j;
 fillchar(f,sizeof(f),0);
 fori:=1 to m do
  forj:=1 to n do
   ifx[i]=y[j] then f[i,j]:=f[i-1,j-1]+1{<动态规划转移方程>}
   else
    if f[i-1,j]>=f[i,j-1] then
     f[i,j]:=f[i-1,j]
     else f[i,j]:=f[i,j-1];
 writeln(f[m,n]);
end.
题目来源: http://www.tyvj.cn:8080/Problem_Show.asp?id=1050

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值