using
System;
class
GFG {
static
int
Total_Max_Cost(
int
[,] pool_cr,
int
buildings,
int
charge,
int
[,] buildings_cr)
{
int
max_ij = Int32.MinValue, max_cr_val = Int32.MinValue, n = Int32.MinValue;
int
min_ij = Int32.MaxValue, temp, i, j;
int
cost = 0;
for
(i = 0; i < buildings; i++)
n = Math.Max(Math.Max(n, buildings_cr[i,0]), buildings_cr[i,1]);
for
(i = 0; i < 4; i++) {
max_ij = Math.Max(max_ij, pool_cr[i,0]);
min_ij = Math.Min(min_ij, pool_cr[i,0]);
}
n = Math.Max(Math.Max(n, max_ij), min_ij );
int
[,] grid =
new
int
[n + 1, n + 1];
for
( i = 0; i <n + 1; i++)
{
for
( j = 0; j <n + 1; j++)
{
grid[i,j] = 0;
}
}
for
(i = 0; i < buildings; i++)
grid[buildings_cr[i,0], buildings_cr[i,1]]
= buildings_cr[i, 2];
for
(i = min_ij; i <= max_ij; i++) {
max_cr_val = grid[i, n];
for
(j = n - 1; j >= 0; j--) {
temp = grid[i,j];
if
(grid[i,j] > max_cr_val)
grid[i,j] -= max_cr_val;
else
grid[i,j] = 0;
max_cr_val = Math.Max(max_cr_val, temp);
}
}
for
(i = min_ij; i <= max_ij; i++) {
for
(j = 0; j < n + 1; j++)
cost += charge * grid[i,j];
}
return
cost;
}
public
static
int
Main()
{
int
[,] pool_cr
= { { 0, 0 }, { 2, 0 }, { 0, 2 }, { 2, 2 } };
int
buildings = 5, charge = 10;
int
[,] buildings_cr = { { 0, 0, 50 },
{ 4, 6, 30 },
{ 5, 5, 20 },
{ 0, 1, 10 },
{ 0, 2, 10 } };
Console.WriteLine( Total_Max_Cost(pool_cr, buildings, charge,
buildings_cr));
return
0;
}
}