Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача "Доминошки", на рекурентные соотношения 
:(
    Опции темы
Intermediate
Дата 6.3.2011, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 6.3.2011

Репутация: нет
Всего: нет



Условие

Доминошка — это прямоугольная плитка, лицевая сторона которой разделена на два квадрата, каждый из которых содержит от 0 до 6 точек. Ряд доминошек выложен на столе:

6  1  1  1
-  -  -  -
1  5  3  2

Количество точек в верхней строке равно 6 + 1 + 1 + 1 = 9 и количество в нижней — 1 + 5 + 3 + 2 = 11. Разница между нижней и верхней строкой равна |11 - 9| = 2. Разница — это абсолютное значение разности двух сумм. Каждая доминошка может быть повернута на 180 градусов, меняя местами верхний и нижний квадраты. 
Необходимо определить, какое минимальное количество поворотов необходимо для минимизации разницы.
В приведенном примере нужно повернуть последнюю доминошку для того, чтобы уменьшить разницу до нуля. В этом случае ответом будет 1.

Входной файл in.txt подготовлен следующим образом:

    * первая строка содержит целое n (1 ≤ n ≤ 250 000), определяющее количество доминошек, лежащих на столе;
    * каждая из следующих n строк содержит два целых числа a и b, разделенных пробелом (0 ≤ a, b ≤ 6); числа a и b, записанные в i+1 строке входного файла определяют количество точек на i-ой доминошке в верхнем и нижнем квадратах соответственно.

Выходной файл out.txt должен содержать одно число, которое равно наименьшему количеству поворотов, необходимых для минимизации разности.

Пример входных данных
4
6 1
1 5
1 3
1 2

Пример выходных данных
1

---------------------------------------------------------------------------------------------------------------------------------------------
Вот моя скромная идея  smile 
Пусть (a, b) - доминошка, a - кол-во точек на верхнем квадрате, b - на нижнем. Тогда поворот доминошки увеличивает или уменьшает разницу между верхней и нижней суммами на 2*|a - b|. Тогда каждой доминошке можно поставить в соответствие число:
2*|a - b| - если она уменьшает разницу между суммами.
-2*|a - b| - если увеличивает

Тогда получаем массив четных чисел диапозона от -12 до 12. Например, в приведенном в условии примере:
6  1  1  1
-  -  -  -
1  5  3  2
соответствует: -10, 8, 4, 2
Разница x равна 2.

Значит, задача сводится к тому, как эффективно в массиве четных целых чисел выбрать наименьшее кол-во чисел так, чтобы их сумма была наиболее близка к разнице x. Вот тут мои мысли заканчиваются  smile Как это эффективно сделать за время O(n) или хотя бы O(n*log(n)) операций? Помогите идеей.
PM MAIL   Вверх
Akina
Дата 6.3.2011, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Задача об одномерном контейнере... ищи "задачу о рюкзаке".


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0382 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.