import
java.util.Arrays;
public
class
LCS {
static
int
[][][] dp;
static
int
rec(String A, String B,
int
i1,
int
i2,
int
k) {
if
(k ==
0
)
return
0
;
if
(i1 <
0
|| i2 <
0
) {
if
(k ==
0
) {
return
0
;
}
return
(
int
) 1e9;
}
if
(dp[i1][i2][k] != -
1
) {
return
dp[i1][i2][k];
}
if
(A.charAt(i1) == B.charAt(i2)) {
dp[i1][i2][k] = rec(A, B, i1 -
1
, i2 -
1
, k -
1
);
}
else
{
int
cost = Math.abs((
int
) A.charAt(i1) - (
int
) B.charAt(i2));
dp[i1][i2][k] = Math.min(
Math.min(rec(A, B, i1 -
1
, i2, k), cost + rec(A, B, i1 -
1
, i2 -
1
, k -
1
)),
rec(A, B, i1, i2 -
1
, k));
}
return
dp[i1][i2][k];
}
static
int
generateSub(String A, String B,
int
N,
int
M,
int
K) {
dp =
new
int
[N][M][K +
1
];
for
(
int
i =
0
; i < N; i++) {
for
(
int
j =
0
; j < M; j++) {
Arrays.fill(dp[i][j], -
1
);
}
}
return
rec(A, B, N -
1
, M -
1
, K);
}
public
static
void
main(String[] args) {
int
K =
3
;
String A =
"abcba"
;
String B =
"acyx"
;
int
N = A.length();
int
M = B.length();
System.out.println(generateSub(A, B, N, M, K));
}
}