|
1 / 1 / 0
Регистрация: 08.05.2016
Сообщений: 14
|
|
Не могу разобраться с алгоритмом деления романа на отдельные тома23.07.2016, 21:16. Показов 2793. Ответов 18
Метки нет (Все метки)
Помогите разобраться с алгоритмом деления на тома. По какому принципу они делятся?
строки из файла input.txt прочитал и записал в массив. Могу работать со второй строкой как элементами массива типа int. А дальше? Полный текст задания: Кликните здесь для просмотра всего текста
Задача 4. Роман
Писатель принес в издательство роман, состоящий из 𝑁 глав. Каждая глава содержала 𝐴𝑖 страниц, 𝑖 = 1..𝑁. Чтобы максимизировать свою прибыль, издательство решило издать роман в нескольких томах, причем страничный объем всех томов должен быть постоянным. Писатель при этом выдвинул следующие требования: 1. все главы должны печататься последовательно, 2. каждая глава должна быть полностью напечатана в одном томе, 3. ни одна глава не должна быть напечатана дважды. Определите, какое максимальное количество томов может выпустить издательство при том, что роман должен быть издан полностью. Формат входных данных В первой строке одно натуральное число 𝑁 (1 ⩽ 𝑁 ⩽ 10000) – количество глав в романе. Во второй строке 𝑁 целых положительных чисел 𝐴𝑖, 𝑖 = 1..𝑁, через пробел, каждое из которых обозначает число страниц в 𝑖-ой главе романа. Суммарное число страниц не превышает 100000. Формат выходных данных В первой строке одно неотрицательное целое число 𝐾 – максимально возможное количе- ство томов при издании романа с соблюдением всех условий. Примеры input.txt 10 1 2 3 6 3 3 2 2 1 1 output.txt 4 Среда разработки: MS Visual Studio 2013 Прошу расписать ход мысли, возможно с кодом.
0
|
|
| 23.07.2016, 21:16 | |
|
Ответы с готовыми решениями:
18
Не могу разобраться с алгоритмом
|
|
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
|
|
| 23.07.2016, 21:44 | |
|
(1 2 3)( 6 )(3 3)( 2 2 1 1) если нет кошерного запрета на рекурсию, то я делал бы ею
0
|
|
|
13 / 13 / 5
Регистрация: 02.01.2014
Сообщений: 60
|
|
| 23.07.2016, 22:00 | |
|
Смотри, во-первых, число страниц в одном томе должно делить общее число страниц => трезвая идея факторизовать число страниц (O(sqrtN)). Теперь отсортируем массив делителей по убыванию и пойдем чекать возможность деления на тома такого размера. Первый подходящий делитель и будет ответом (число страниц, деленное на него).
0
|
|
|
1 / 1 / 0
Регистрация: 08.05.2016
Сообщений: 14
|
||
| 23.07.2016, 22:03 [ТС] | ||
|
0
|
||
|
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
|
|
| 23.07.2016, 22:16 | |
|
предложение от AVIK разумнее, ищем максимальную главу , и от нее до общей суммы глав ищем толщину тома, чтоб она делила общую сумму без остатка, нашли - пошли по главам, не устраивает - к следующей толщине
0
|
|
|
4 / 4 / 1
Регистрация: 16.12.2014
Сообщений: 14
|
|
| 23.07.2016, 22:27 | |
|
qwert73, максимальное количество томов нам известно, сумма страниц тоже, можем рассчитать толщину тома. Рассчитали, проверили, если нет, повторяем для N-1 и так пока не найдем.
0
|
|
|
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
|
||||||
| 23.07.2016, 22:50 | ||||||
0
|
||||||
|
1 / 1 / 0
Регистрация: 08.05.2016
Сообщений: 14
|
||
| 23.07.2016, 22:58 [ТС] | ||
|
0
|
||
|
13 / 13 / 5
Регистрация: 02.01.2014
Сообщений: 60
|
||||||
| 23.07.2016, 23:02 | ||||||
0
|
||||||
|
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
|
||||||
| 23.07.2016, 23:05 | ||||||
|
так правильнее
0
|
||||||
|
Комп_Оратор)
|
||
| 24.07.2016, 01:24 | ||
Сообщение было отмечено qwert73 как решение
Решение
qwert73, мне условие кажется странным. Вот эта фраза не красит математиков составивших условие:
Вы трактуете эту фразу так, как если бы она была: "страничный объем у всех томов должен быть одинаков" или "страничные объемы у всех томов должны быть равны". Ну допустим с языком и логикой у составителей задачи не сложилось. Бывает. Но ещё интереснее то, что в жизни, практически, не бывает так, чтобы книгу можно было разделить, хотя бы на две части из равного количества страниц, соблюдая очерёдность и завершённость глав, а так же уникальность контента. Если не играть с Для ряда в Вашей задаче: 123633221, группировка 6 6 6 6 возможна. Но данное условие очень искусственно. Оно уже само и есть решение, нужно только набирая группу с головы (можно и из другого места), подыскивать следующую, равную по объёму. Начинаем с единицы и идем, пока не встретим невозможную следующую. Встретили, - возвращаемся к началу и увеличиваем количество глав на 1. Пока не сойдётся до конца. Ваш пример: 1)в группу A берём первую главу (объём 1 стр.) 2)в группу B берём вторую главу (объём 2 стр.) Проверяем равенство объёмов A==B -false и B>A (то есть наращивая B нельзя ничего исправить). Возвращаемся: 1)в группу A берём первую главу (объём 1 стр.) и вторую главу (объём 2 стр.) итого объём A=3 (1+2) 2)в группу B берём третью главу (объём 3 стр.) Проверяем равенство объёмов A==B -true 3)составляем группу С из 4-й главы. Объём 6 и это больше A/B (эти одинаковы), что снова возвращает нас к началу. 4)группу А составляем из 1-й, 2-й и 3-й глав и получаем объём 6 (вот она - струя)) теперь, о чудо, нам будет везти во всём и до конца. Чего в жизни не бывает. Обидно, что люди сочиняют такие задачи. Убогость воображения просто подавляет и хочется крикнуть:-"Посмотрите кругом люди! Вся жизнь, - просто одна сплошная задача, состоящая из задач и не нужно ставить её и её задачи в такие положения! Они уже и так стоят как нужно!". Но бесполезно. Всё же рекомендую предусмотреть случай, когда решение задачи невозможно. Например при таком наборе: 1,2,7,25. В наше время такое не задавали. Вот почему, современных студентов мне особенно жаль. Удачи Вам и терпения, qwert73.
1
|
||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 24.07.2016, 01:56 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Сообщение было отмечено qwert73 как решение
Решение
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||