|
0 / 0 / 0
Регистрация: 20.04.2012
Сообщений: 3
|
|
Разложить камни на 2 кучки так, чтобы разница масс этих кучек была минимальной.22.04.2012, 10:38. Показов 27195. Ответов 16
Метки нет (Все метки)
Здравствуйте, помогите, пожалуйста, решить данную ниже задачу.
У Вас есть N камней с массами W1, W2 , … WN. Требуется разложить камни на 2 кучки так, чтобы разница масс этих кучек была минимальной. Входные данные В первой строке входного файла INPUT.TXT записано число N – количество камней (1 ≤ N ≤ 18). Во второй строке через пробел перечислены массы камней W1, W2 , … WN (1 ≤ Wi ≤ 105). Выходные данные В единственную строку выходного файла OUTPUT.TXT нужно вывести одно неотрицательное целое число – минимально возможную разницу между массами двух кучек.
0
|
|
| 22.04.2012, 10:38 | |
|
Ответы с готовыми решениями:
16
Требуется разложить камни на 2 кучки так, чтобы разница масс этих кучек была минимальной. Распределить камни в две кучи так, чтобы разность весов этих двух куч была минимальной |
|
|
|
| 22.04.2012, 12:11 | |
|
примени динамическое программирование. главное полный перебор не делай - он не оптимален.
0
|
|
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
|||
| 22.04.2012, 12:26 | |||
|
1
|
|||
|
|
||||||
| 22.04.2012, 13:14 | ||||||
|
тебе при полном переборе предстоит перебрать 2^18 вариантов
или 262144, для каждого найти вес И того 262144*18=4718592 действий это минимум если на нахождение одного варианта у тебя одна операция тратится пять миллионов меньше чем за секунду? Добавлено через 16 минут
0
|
||||||
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
||||||||
| 22.04.2012, 13:35 | ||||||||
Сообщение было отмечено как решение
Решение
Чтобы не быть голословным я нашел эту задачу. Она здесь: http://acmp.ru/?main=task&id_task=71 Мой код прошел все тесты и показал: 0,197 секунды. Итог: все-таки с математикой Вы не сильно дружите ).
4
|
||||||||
|
|
|
| 22.04.2012, 13:47 | |
|
ну вот, я тебе и написал 262144, прочесть не смог?
рекурсия запросто увеличит это число в несколько раз У тебя алгоритм экспоненциальной сложности, а у меня порядка N*N*Wсред Максимум 34000 действий, и то, если все без исключения камни по 108 весят
0
|
|
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
||||
| 22.04.2012, 14:04 | ||||
|
Не по теме: А Вы сами пробовали Ваш код сдавать по указанной ссылке?
0
|
||||
|
0 / 0 / 0
Регистрация: 20.04.2012
Сообщений: 3
|
|
| 22.04.2012, 14:34 [ТС] | |
|
valeriikozlov, спасибо большое за код.
0
|
|
|
|
||
| 22.04.2012, 14:41 | ||
|
0
|
||
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
||
| 22.04.2012, 14:51 | ||
|
http://acmp.ru/ здесь регистрируйтесь и обязательно прочитайте раздел "новичкам".
2
|
||
|
Заблокирован
|
|
| 22.04.2012, 15:51 | |
|
А что делать будете, если камней будет не 18, а скажем 10000?
0
|
|
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
||
| 22.04.2012, 20:25 | ||
|
thick_int, Вы просто теорию хотите узнать или есть задача, на эту же тему, только с ограничениями N до 10000? Если есть такая задача, то давайте ссылку на нее.
0
|
||
|
Заблокирован
|
|
| 23.04.2012, 03:14 | |
|
Ну вообще-то про теорию решения подобных задач.
Мне вот так кажется, что исходная задача сводится к задаче нахождения кортежа, такого что, разница между суммой элементов которого и половиной суммарной массы, минимальна.
0
|
|
|
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 5
|
||||||
| 03.07.2012, 00:12 | ||||||
|
Решал задачу сам, вот сделал такое решение.
P.s. решал задачу с другим условием у меня кол-во камней от 1 до 20.
0
|
||||||
|
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
|
|
| 03.07.2012, 00:21 | |
|
напишите алгоритм для дп пожалуйста)
0
|
|
|
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 5
|
|
| 03.07.2012, 00:42 | |
|
1)сортируем массив по возрастанию
2)кидаем в первую кучу самый тяжелый камень, во вторую 2ой с конца. потом идем с конца, докидываем во 2-ю кучу камней, пока она не станет больше первой, после этого докидываем в первую кучу камней пока она не станет больше второй и т. д. Но, увы, он не работает почему-то.
0
|
|
|
9 / 9 / 1
Регистрация: 01.07.2012
Сообщений: 138
|
||||||||||||||||
| 06.08.2012, 02:23 | ||||||||||||||||
|
Попоробовал решать эту задачу. Вот примерная схема алгоритма:
Предположим, что нам дан массив вещественных чисел, значения которых представляют веса камней из рассматриваемой основной кучи. Прежде всего, отсортируем данный массив, который впредь мы будем рассматривать как сортированный. Если куча содержит два или три камня, то тогда решение задачи тривиально: во вторую кучу кладем самый тяжелый камень, а в первую кучу складываем все остальные камни. Всюду далее будем считать, что камней, как минимум 4. Далее найдем суммарный вес камней, а с ней и половину веса всех камней. Во вторую кучу поместим самый тяжелый камень. Если вес этого самого тяжелого камня равен или больше половины суммарного веса всех камней, то тогда все остальные камни складываем в первую кучу, после чего задачу можно считать решенной. Теперь несколько забежим вперед и рассмотрим какой-нибудь конкретный расклад камней по кучам. Такой расклад характеризуется камнями, которые находятся в первой куче, во второй куче и камнями, которые еще не разложены. Сейчас наша задача будет состоять в том, чтобы выявить среди неразложенных камней те из них, которые заведомо должны быть либо в первой куче, либо во второй куче. Хотя, вполне вероятно, что ни одного из таких камней мы не найдем. Сперва рассмотрим вторую кучу. Вопрос с первой кучей решается аналогично. Будем среди неразложенных камней искать те из них, которые обладают следующими свойствами: 1) сумма весов данного камня и суммарного веса камней, которые уже положены во вторую кучу больше половины суммарного веса всех камней, 2) среди неразложенных камней есть камни меньшего веса, удовлетворяющие данному условию. В этом случае каждый такой камень должен быть помещен в первую кучу. Оставшиеся неразложенные камни обработаем подобным образом на предмет выявления среди них тех, которые заведомо должны попадать уже во вторую кучу. Далее определим наши действия, когда ни про один камень из числа еще неразложенных заведомо невозможно сказать, в какую из двух куч он должен быть помещен. В этом случае мы поступим следующим образом. Среди неразложенных камней возьмем самый тяжелый и положим его сперва во вторую кучу, после чего обработаем данный расклад камней по вышеуказанному алгоритму. Далее этот же камень мы положим уже в первую кучу и также обработаем уже этот расклад по вышеуказанному алгоритму. Теперь некоторые детали. Всякий раз, когда мы помещаем какой-либо камень в одну из двух куч, мы будем проверять, не стал ли вес данной кучи больше половины суммарного веса всех камней, что означает, что все остальные еще неразложенные камни должны быть помещены в другую кучу, и на этом данная цепочка раскладываний должна быть завершена с запоминанием текущего результата, который затем будет сравниваться с лучшим результатом, который был найден к данному времени. Также, всякий раз при помещении какого-либо камня в одну из двух куч мы будем проверять, не стал ли вес данной кучи равен половину суммарного веса всех камней. В этом случае, понятно, что все еще неразложенные камни мы должны сложить в другую кучу. После этого мы должны записать данный результат, как наилучший, а затем прервать все цепочки раскладываний. Очевидно, что подобная схема носит рекурсивный характер. Поэтому, чтобы снизить рекурсивную нагрузку мы поступим следующим образом. Данный алгоритм будет продолжаться до тех пор, пока мы либо не найдем такой расклад, при котором суммарный вес камней в одной из двух куч будет равен половине суммарного веса всех камней, либо до тех пор, пока количество еще неразложенных камней не станет равным 3. В этом последнем случае, мы будем тупо ручным способом будем искать наилучший расклад, не забывая, конечно, о том, что при нахождении такого расклада, при котором суммарный вес камней в одной из двух куч равный половину суммарного веса всех камней является наилучшим результатом, после чего все действующие на данный момент цепочки раскладывания должны быть прекращены. Добавлено через 1 час 57 минут Теперь приведу код Заголовочный файл: heaps.h: #pragma once #include <vector> using namespace std;
3
|
||||||||||||||||
| 06.08.2012, 02:23 | |
|
Помогаю со студенческими работами здесь
17
Разложить камни в 2 кучи так, что разность весов двух куч была минимальной Написать программу для раздела этих камней на две кучи так, чтобы разность весов этих куч была бы минимальной
Напишите программу, которая распределит камни в две кучи так, что разность весов этих двух куч будет минимальной
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|