博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
foj2024
阅读量:5031 次
发布时间:2019-06-12

本文共 1209 字,大约阅读时间需要 4 分钟。

ContractedBlock.gif
ExpandedBlockStart.gif
View Code
 
#include
<
stdio.h
>
#include
<
string
.h
>
#define
M 1010
int
c[M][M];
int
f[M][M];
int
min(
int
a,
int
b,
int
c)
{
int
z
=
(a
<
b)
?
a:b;
if
(z
<
c)
return
z;
else
return
c;
}
int
Max(
int
a ,
int
b)
{
return
a
>
b
?
a:b;
}
void
LCS(
char
aa[],
char
bb[],
int
x,
int
y)
{
int
i,j;
for
(i
=
0
;i
<=
x;i
++
)
c[i][
0
]
=
0
;
for
(j
=
0
;j
<=
y;j
++
)
c[
0
][j]
=
0
;
for
(i
=
1
;i
<=
x;i
++
)
for
(j
=
1
;j
<=
y;j
++
)
{
if
(aa[i
-
1
]
==
bb[j
-
1
]) c[i][j]
=
c[i
-
1
][j
-
1
]
+
1
;
else
c[i][j]
=
Max(c[i][j
-
1
],c[i
-
1
][j]);
}
}
int
main()
{
char
a[M],b[M];
int
L1,L2;
int
t;
int
k
=
0
;
scanf(
"
%d
"
,
&
t);
while
(t
--
)
{
scanf(
"
%s %s
"
,a,b);
L1
=
strlen(a);
L2
=
strlen(b);
LCS(a,b,L1,L2);
int
xx
=
c[L1][L2];
int
ans
=
0
;
int
i,j;
f[
0
][
0
]
=
0
;
for
(i
=
0
;i
<=
L1;i
++
)
f[i][
0
]
=
i;
for
(j
=
0
;j
<=
L2;j
++
)
f[
0
][j]
=
j;
for
(i
=
1
;i
<=
L1;i
++
)
for
(j
=
1
;j
<=
L2;j
++
)
{
if
(a[i
-
1
]
==
b[j
-
1
])
//
转移方程
f[i][j]
=
f[i
-
1
][j
-
1
];
else
f[i][j]
=
min(f[i
-
1
][j
-
1
]
+
1
,f[i
-
1
][j]
+
1
,f[i][j
-
1
]
+
1
);
}
printf(
"
Case %d: LCS=%d EditStep=%d\n
"
,
++
k,xx,f[L1][L2]);
}
return
0
;
}

转载于:https://www.cnblogs.com/FCWORLD/archive/2011/05/02/2034242.html

你可能感兴趣的文章
c#匿名方法
查看>>
如何判断链表是否有环
查看>>
【小程序】缓存
查看>>
ssh无密码登陆屌丝指南
查看>>
MySQL锁之三:MySQL的共享锁与排它锁编码演示
查看>>
docker常用命令详解
查看>>
jQuery技巧大放送
查看>>
字符串转换成JSON的三种方式
查看>>
Hive时间函数笔记
查看>>
clojure-emacs-autocomplete
查看>>
一个自己写的判断2个相同对象的属性值差异的工具类
查看>>
10 华电内部文档搜索系统 search03
查看>>
[HIHO1149]回文字符序列(dp)
查看>>
[HDU1402]A * B Problem Plus(FFT)
查看>>
[CF803C] Maximal GCD(gcd,贪心,构造)
查看>>
逆时针旋转的矩阵变换
查看>>
第10周15/16/17
查看>>
【数据库】SQL两表之间:根据一个表的字段更新另一个表的字段
查看>>
四六级作文常见错误解析(转载)
查看>>
Tomcat
查看>>