using
System;
class
GFG {
static
int
Solve(
int
i,
int
j,
int
localSum,
int
[,] grid,
int
k,
int
m,
int
n,
int
[,,] dp)
{
if
(i > m - 1 || j > n - 1)
return
0;
if
(i == m - 1 && j == n - 1) {
if
((localSum + grid[i, j]) % k != 0)
return
1;
else
return
0;
}
if
(dp[i, j, localSum] != -1)
return
dp[i, j, localSum];
int
right
= Solve(i, j + 1, (localSum + grid[i, j]) % k,
grid, k, m, n, dp);
int
down
= Solve(i + 1, j, (localSum + grid[i, j]) % k,
grid, k, m, n, dp);
return
dp[i, j, localSum] = (right + down);
}
static
void
Main(
string
[] args)
{
int
[,] mat
= {{5, 2, 4}, {3, 0, 5}, {0, 7, 2}};
int
K = 3;
int
M = mat.GetLength(0);
int
N = mat.GetLength(1);
int
[,,] dp
=
new
int
[M, N, K];
for
(
int
i = 0; i < M; i++) {
for
(
int
j = 0; j < N; j++) {
for
(
int
k = 0; k < K; k++) {
dp[i, j, k] = -1;
}
}
}
int
ways = Solve(0, 0, 0, mat, K, M, N, dp);
Console.WriteLine(ways);
}
}