Кто может объяснить как решать? Заранее спасибо.

| № | Пользователь | Рейтинг |
|---|---|---|
| 1 | Benq | 3676 |
| 2 | Kevin114514 | 3657 |
| 3 | jiangly | 3638 |
| 4 | turmax | 3442 |
| 5 | tourist | 3380 |
| 6 | Um_nik | 3353 |
| 7 | strapple | 3350 |
| 8 | squareOf105 | 3346 |
| 9 | heuristica | 3322 |
| 10 | maroonrk | 3310 |
| Страны | Города | Организации | Всё → |
| № | Пользователь | Вклад |
|---|---|---|
| 1 | Qingyu | 158 |
| 2 | nik_exists | 151 |
| 3 | maspy | 150 |
| 4 | AmShZ | 144 |
| 4 | Um_nik | 144 |
| 6 | Errichto | 139 |
| 7 | adamant | 137 |
| 8 | BledDest | 135 |
| 9 | maroonrk | 133 |
| 10 | Proof_by_QED | 130 |
Кто может объяснить как решать? Заранее спасибо.

| Название |
|---|



Можно повернуть матрицу виртуальнона 45 градусов, то есть
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
повернётся в
__ __ __ 11 __ __ __
__ __ 21 __ 22 __ __
__ 31 __ 22 __ 13 __
41 __ 32 __ 23 __ 14
__ 42 __ 33 __ 24 __
__ __ 43 __ 34 __ __
__ __ __ 44 __ __ __
То есть получится матрица размерности не более, чем (2n + 1)x(2n + 1) Через __ тут обозначена пустая клетка, при вычислении сумм нужно поставить 0 Затем на этой матрице посчитать кумулятивную матрицу и тогда посчитать сумму на ромбе из исходной задаче ~ посчитать сумму на подматрице новой матрицы. Это можно делать за O(1). Тогда можно перебрать все возможные ромбы исходной матрицы (их O(n3)) и на каждом посчитать сумму за O(1), сохраняя максимальный
А что значит "кумулятивная матрица"?
Это значит, что в ячейке
sum[r][c]должна храниться сумма всех элементов матрицыarr[i][j]таких, чтоi <= rиj <= c. Тогда сумму в произвольном прямоугольнике можно находить так:s(r1,c1,r2,c2)=sum[r2][c2]-sum[r2][c1-1]-sum[r1-1][c2]+sum[r1-1][c1-1]Саму матрицу частичных сумм построить с помощью динамического программирования, выражая интересующую ячейку через уже посчитанные:
sum[r][c]=arr[r][c]+sum[r-1][c]+sum[r][c-1]-sum[r-1][c-1]Не знаю, где прочитать подробнее про частичные суммы на двумерном массиве, но лично я о них узнал из этого видео на youtube.com
Можете посмотреть на примере кода, решающего указанную Вами задачу.
Есть ссылка, где можно попробовать сдать онлайн?
Да, вот. Казахстанская региональная олимпиада 2014 года
Ссылка никуда не ведет
http://dl.gsu.by/
В каком разделе можно сдать эту задачу онлайн, отправив код на проверку?
Ограничения достаточно свободные, можно перебрать без препроцессинга за O(N2 * M2).
В этой задаче ограничения на n и m до 500. Не совсем понятно, как Вы собираетесь порядка 5004 операций умещать в 2 секунды, даже с хорошим коэффициентов. Вот ваш код, запущенный на тесте 500 × 500 единичек, дающий TLE. Увы, даже при очень хорошей оптимизации, миллиард очень простых операций в секунду — потолок для C++.
Да, что-то сильно недооценил ограничения.