using
System;
class
GFG
{
static
int
solve(
int
[,] a,
int
floors,
int
jumps,
int
buildings)
{
int
[,,]dp =
new
int
[floors + 1,jumps + 1,buildings + 1];
for
(
int
i = 1; i <= floors; i++) {
for
(
int
j = 0; j <= jumps; j++) {
for
(
int
k = 0; k < buildings; k++) {
if
(i == 1)
{
dp[i, j, k] = a[k, i - 1];
}
else
if
(j == 0) {
dp[i, j, k] = dp[i - 1, j, k]
+ a[k, i - 1];
}
else
{
if
(k == 0) {
dp[i, j, k] = Math.Max(dp[i - 1, j, k],
dp[i - 1, j - 1, k + 1])
+ a[k,i - 1];
}
else
if
(k == buildings - 1) {
dp[i, j, k]
= Math.Max(
dp[i - 1,j - 1,k - 1],
dp[i - 1,j,k])
+ a[k,i - 1];
}
else
{
dp[i, j, k]
= Math.Max(
Math.Max( dp[i - 1, j - 1, k - 1],
dp[i - 1, j, k]),
dp[i - 1, j - 1, k + 1] )
+ a[k, i - 1];
}
}
}
}
}
int
ans = 0;
for
(
int
building = 0; building < buildings; building++)
ans = Math.Max(ans, dp[floors,jumps,building]);
return
ans;
}
public
static
void
Main(
string
[] args)
{
int
N = 5, M = 2, K = 3;
int
[,] a = {
{ 4, 5, 1, 2, 10 },
{ 9, 7, 3, 20, 16 },
{ 6, 12, 13, 9, 8 }
};
Console.WriteLine(solve(a, N, M, K));
}
}