using
System;
class
GFG
{
static
int
RODS = 3;
static
int
N = 3;
static
int
[,,]dp=
new
int
[N + 1,RODS + 1,RODS + 1];
static
void
initialize()
{
for
(
int
i = 0; i <= N; i += 1)
{
for
(
int
j = 1; j <= RODS; j++)
{
for
(
int
k = 1; k <= RODS; k += 1)
{
dp[i,j,k] =
int
.MaxValue;
}
}
}
}
static
int
mincost(
int
idx,
int
src,
int
dest,
int
[,]costs)
{
if
(idx > N)
return
0;
if
(dp[idx,src,dest] !=
int
.MaxValue)
return
dp[idx,src,dest];
int
rem = 6 - (src + dest);
int
ans =
int
.MaxValue;
int
case1 = costs[src - 1,dest - 1]
+ mincost(idx + 1, src, rem, costs)
+ mincost(idx + 1, rem, dest, costs);
int
case2 = costs[src - 1,rem - 1]
+ mincost(idx + 1, src, dest, costs)
+ mincost(idx + 1, dest, src, costs)
+ costs[rem - 1,dest - 1]
+ mincost(idx + 1, src, dest, costs);
ans = Math.Min(case1, case2);
dp[idx,src,dest] = ans;
return
ans;
}
public
static
void
Main (String[] args)
{
int
[,]costs = { { 0, 1, 2 },
{ 2, 0, 1 },
{ 3, 2, 0 } };
initialize();
Console.WriteLine(mincost(1, 1, 3, costs));
}
}