Ну, ваша первая задача при разработке алгоритма динамического программирования должна состоять в том, чтобы найти рекурсивное решение проблемы. После того, как это сделано, преобразование его в алгоритм динамического программирования почти тривиально;).
Несколько советов, которые могли / не могли помочь:
Возможный базовый случай очевиден: любые два квадрата 1 ячейки всегда не перекрываются.
Имейте в виду, что самый большой из двух квадратов не может охватывать всю таблицу (потому что тогда у вас не будет второго по величине), поэтому он не может быть строк: размер столбцов.
Вы должны иметь «оценку» для каждого решения, которое вы оцениваете, чтобы увидеть, какое решение является лучшим. Это, очевидно, size1 + size2 с условием, что size1 должен быть максимально возможным.
Удачи !!