CF BUDDY
← Problems·

1955H · The Most Reckless Defense

2300 · bitmasks, brute force, constructive algorithms

Problem: You are playing a very popular Tower Defense game called "Runnerfield 2". In this game, the player sets up defensive towers that attack enemies moving from a certain starting point to the player's base.

You are given a grid of size n×mn \times m, on which kk towers are already placed and a path is laid out through which enemies will move. The cell at the intersection of the xx-th row and the yy-th column is denoted as (x,y)(x, y).

Each second, a tower deals pip_i units of damage to all enemies within its range. For example, if an enemy is located at cell (x,y)(x, y) and a tower is at (xi,yi)(x_i, y_i) with a range of rr, then the enemy will take damage of pip_i if (xxi)2+(yyi)2r2(x - x_i) ^ 2 + (y - y_i) ^ 2 \le r ^ 2.

Enemies move from cell (1,1)(1, 1) to cell (n,m)(n, m), visiting each cell of the path exactly once. An enemy instantly moves to an adjacent cell horizontally or vertically, but before doing so, it spends one second in the current cell. If its health becomes zero or less during this second, the enemy can no longer move. The player loses if an enemy reaches cell (n,m)(n, m) and can make one more move.

By default, all towers have a zero range, but the player can set a tower's range to an integer rr (r>0r > 0), in which case the health of all enemies will increase by 3r3^r. However, each rr can only be used for at most one tower.

Suppose an enemy has a base health of hh units. If the tower ranges are 22, 44, and 55, then the enemy's health at the start of the path will be h+32+34+35=h+9+81+243=h+333h + 3 ^ 2 + 3 ^ 4 + 3 ^ 5 = h + 9 + 81 + 243 = h + 333. The choice of ranges is made once before the appearance of enemies and cannot be changed after the game starts.

Find the maximum amount of base health hh for which it is possible to set the ranges so that the player does not lose when an enemy with health hh passes through (without considering the additions for tower ranges).

Input Format: The first line contains an integer tt (1t1001 \le t \le 100) — the number of test cases.

The first line of each test case contains three integers nn, mm, and kk (2n,m50,1k<nm2 \le n, m \le 50, 1 \le k < n \cdot m) — the dimensions of the field and the number of towers on it.

The next nn lines each contain mm characters — the description of each row of the field, where the character "." denotes an empty cell, and the character "#" denotes a path cell that the enemies will pass through.

Then follow kk lines — the description of the towers. Each line of description contains three integers xix_i, yiy_i, and pip_i (1xin,1yim,1pi5001 \le x_i \le n, 1 \le y_i \le m, 1 \le p_i \le 500) — the coordinates of the tower and its attack parameter. All coordinates correspond to empty cells on the game field, and all pairs (xi,yi)(x_i, y_i) are pairwise distinct.

It is guaranteed that the sum of nmn \cdot m does not exceed 25002500 for all test cases.

Output Format: For each test case, output the maximum amount of base health hh on a separate line, for which it is possible to set the ranges so that the player does not lose when an enemy with health hh passes through (without considering the additions for tower ranges).

If it is impossible to choose ranges even for an enemy with 11 unit of base health, output "0".

Note: In the first example, there is no point in increasing the tower range, as it will not be able to deal enough damage to the monster even with 11 unit of health.

In the second example, the tower has a range of 11, and it deals damage to the monster in cells (1,1)(1, 1) and (2,2)(2, 2).

In the third example, the tower has a range of 22, and it deals damage to the monster in all path cells. If the enemy's base health is 14911491, then after the addition for the tower range, its health will be 1491+32=15001491 + 3 ^ 2 = 1500, which exactly equals the damage the tower will deal to it in three seconds.

In the fourth example, the tower at (1,2)(1, 2) has a range of 11, and the tower at (3,1)(3, 1) has a range of 22.

Sample Cases

Case 1

Input

6
2 2 1
#.
##
1 2 1
2 2 1
#.
##
1 2 2
2 2 1
#.
##
1 2 500
3 3 2
#..
##.
.##
1 2 4
3 1 3
3 5 2
#.###
#.#.#
###.#
2 2 2
2 4 2
5 5 4
#....
#....
#....
#....
#####
3 2 142
4 5 9
2 5 79
1 3 50

Output

0
1
1491
11
8
1797

Similar problems

00:00:00
Loading editor…
Welcome! I'm your coding tutor for this problem. Use the chips below to reveal stored hints or get AI feedback on your code. I'll guide you step by step — never giving away the solution.

Sign in to unlock AI tutor feedback