|
0 / 0 / 0
Регистрация: 20.04.2012
Сообщений: 3
|
|
Разложить камни на 2 кучки так, чтобы разница масс этих кучек была минимальной.22.04.2012, 10:38. Показов 27574. Ответов 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 кучи так, что разность весов двух куч была минимальной Написать программу для раздела этих камней на две кучи так, чтобы разность весов этих куч была бы минимальной
Напишите программу, которая распределит камни в две кучи так, что разность весов этих двух куч будет минимальной
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|