using
System;
public
class
GFG{
static
int
[,,] dp =
new
int
[101, 101, 2];
static
int
minCostUtil(
string
a,
int
n,
string
b,
int
m,
int
[] c,
int
removed)
{
if
(n == 0 || m == 0) {
if
(removed == 0)
return
99999;
return
0;
}
if
(dp[n, m, removed > 0 ? 1 : 0] != -1)
return
dp[n, m, removed > 0 ? 1 : 0];
if
(a[n - 1] == b[m - 1]) {
dp[n, m, removed > 0 ? 1 : 0]
= Math.Min(c[n - 1]
+ minCostUtil(a, n - 1, b, m,
c, removed),
minCostUtil(a, n - 1, b, m - 1,
c, removed - 1));
return
dp[n, m, removed > 0 ? 1 : 0];
}
else
return
dp[n, m, removed > 0 ? 1 : 0]
= minCostUtil(a, n - 1, b, m, c, removed);
}
static
int
minCost(
string
a,
string
b,
int
[] c)
{
for
(
int
i = 0; i < 101; i++) {
for
(
int
j = 0; j < 101; j++) {
for
(
int
k = 0; k < 2; k++) {
dp[i, j, k] = -1;
}
}
}
return
minCostUtil(a, a.Length, b, b.Length, c,
b.Length);
}
static
public
void
Main (){
string
A =
"abccdabccdabccd"
;
string
B =
"bccd"
;
int
[] arr = { 1, 2, 3, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13, 14, 15 };
Console.Write(minCost(A, B, arr));
}
}