Re: задачка с acm.uva.es :)

From
Oleg I. Khovayko ()
To
Anthony Volkov
Date
2002-12-09T19:05:26Z
Area
RU.ALGORITHMS
From: "Oleg I. Khovayko" <olegh@ncbi.nlm.nih.gov>

Anthony Volkov wrote:
> 
> 
> Есть такое предложение:

Что-то я недопонял в твоем алгоритме.
Давай на примере. Пусть есть матрица:

0:  -1   0   1
1:   0   0   0
2:   1   0  -1

> 
> 1) Найти суммы полных строк

Находим. Получаем все нули:

> 2) Найти среди них максимальную и минимальную

Ни того, ни другого не нашли. Что дальше делать будем?

> 3) Определить диапазон строк, в который входит максимальная, но не входит
> минимальная.

Хорошо. Предположим, что максимальная сумма у строки 0.
Каков диапазон строк для этой суммы? Очевидно, [0..2]!

> 4) Ту же операцию провести для столбцов.

Сделали. Тоже получили [0..2].

> 5) Решение = персечение получившихся диапазонов.

Итого, решение - вся матрица. То есть считается, что макс. сумма = 0.
На самом же деле, есть два эквивалентных решения: (2,0,2,0) и (0,2,0,2),
где сумма равна 1.

> 
> Критика принимается в полной мере и даже приветствуется.

Ну вот она, критика...

------------------------

На самом деле, я придумал, как оптимизировать вычисление суммы 
произвольного прямоугольника для переборной задачи. Если площадь
умеем считать быстро, то получится 4 вложеных цикла до сотни, то есть 
100 миллионов операций. Это порядка десятков секунд времени.
Что явно менее 15 минут лобового решения.

А быстро сумму прямоугольника считать можно вот как:

1. Заводим дополнительную таблицу "с рамочкой" размером 102x102 из 
int-ов, где каждая клетка x[i+1,j+1] содержит сумму чисел в 
прямоугольнике (0,0,i,j). То есть нулевые столбец и строка будут 
содержать нули. Такая вспомогательная матрица считается очень 
быстро методом ДП. Если надо, процедуру напишу.

Пример: Входная матрица:

1 2
3 4

матрица x:

0  0  0  0
0  1  3  3
0  4 10 10
0  4 10 10


2. Легко видеть, что сумма любого прямоугольника (I,J,i,j)
есть:
S = x[i+1,j+1] + x[I,J] - x[I,j+1] - x[i+1,J]

(I,J) - левый верхний угол, (i,j) - правый нижний.


-- 
#include <best/regards.hpp>
Oleg I. KHOVAYKO  
(301)435-5885 || WEB: http://olegh.spedia.net
--- ifmail v.2.15dev5
 * Origin: National Center for Biotechnology Information (2:5020/400)