У меня есть идея, которая может помочь ускорить поиск случая, когда размер круга намного больше, чем размер маленьких квадратов.
Вместо того, чтобы перемещать круг по одному маленькому квадрату за раз, вы начинаете с разбиения всей плоскости на неперекрывающиеся круги и вычисления значения для каждого из них. Это позволит вам установить верхние границы возможных сумм всех оставшихся кругов.
Например, скажем, у вас есть только девять кругов в плане плана 3х3, и их суммы:
10 10 10
10 1 1
1 1 1
Тогда вы знаете, что самое большее, что может быть у любого круга, это 31, и круг из 31 должен перекрывать 4 круга в верхнем левом углу: 0,0 0,1, 1,0 и 1,1 (строка , col позиции сверху слева).
Учитывая приведенные выше цифры, вы можете сразу игнорировать все круги, которые лежат исключительно в нижней правой области: 1,1 1,2, 2,1 2,2.
Реализация этого алгоритма будет немного сложнее, но он должен сработать и дать вам массу ускорения, если круги намного больше квадратов, а числа распределены неравномерно (то есть, если в некоторых областях, как правило, большее число чем другие).