using
System;
using
System.Collections.Generic;
public
class
GFG{
static
int
maximumProfits(
int
n,
int
m,
int
k,
List<List<
int
> > grid)
{
int
[, ,] dp =
new
int
[n,m,k + 1];
for
(
int
i = 0; i < n; i++) {
for
(
int
j = 0; j < m; j++) {
for
(
int
l = 0; l < k + 1; l++) {
dp[i, j, l] = Int32.MinValue;
}
}
}
dp[0,0,0] = 0;
for
(
int
i = 0; i < n; i++) {
for
(
int
j = 0; j < m; j++) {
for
(
int
l = k - 1; l >= 0; l--) {
if
(dp[i,j,l] >= 0) {
dp[i, j,l+1] = Math.Max(
dp[i, j,l+1],
dp[i, j,l]
+ grid[i][j]);
}
}
for
(
int
l = 0; l < k + 1; l++) {
if
(dp[i,j,l] >= 0) {
if
(i + 1 < n) {
dp[i + 1,j,0]
= Math.Max(dp[i + 1,j,0],
dp[i,j,l]);
}
if
(j + 1 < m) {
dp[i,j + 1,l]
= Math.Max(dp[i,j + 1,l],
dp[i,j, l]);
}
}
}
}
}
int
ans = 0;
for
(
int
l = 0; l < k + 1; l++) {
ans = Math.Max(ans, dp[n - 1,m - 1,l]);
}
return
ans;
}
static
public
void
Main (){
int
N = 3, M = 3, K = 2;
List<List<
int
>> mat =
new
List<List<
int
>>();
mat.Add(
new
List<
int
> {2, 10, 8 });
mat.Add(
new
List<
int
> { 8, 8, 8 });
mat.Add(
new
List<
int
> { 0, 1, 0 });
Console.Write(maximumProfits(N, M, K, mat));
}
}