Предлагаю размять мозгу и порешать школьную олимпиаду по информатике. Задача такая:
В гостинице для жирафов администрация хочет запастись подушкам так, чтобы удовлетворить потребности любого своего возможного постояльца. Известно, что жирафам в зависимости от длины их шеи нужно сложить стопку подушек (в стопке одна или несколько подушек) толщиной от 1 до n сантиметров. При этом администрация хочет обойтись как можно меньшим числом подушек, а среди наборов подушек, удовлетворяющих этим требованиям, администрация выберет набор минимальной суммарной толщины, чтобы он занимал минимальный объём в шкафу. Помогите администрации составить нужный набор подушек, позволяющий получить стопку любой высоты от 1 до n сантиметров включительно.
Например, при n = 9, нужно выплюнуть 1; 2; 3; 3 в любом порядке, потому как 1 = 1 2 = 2 3 = 3 3 + 2 = 5 3 + 3 = 6 3 + 3 + 1 = 7 3 + 3 + 2 = 8 3 + 3 + 3 = 9
За решение n <= 20 дают 20 штук баллов, а за n <= 1000 - 40.
Кто использует аналогичные монетки с литкода или любую другую помощь из зала, тот пидор
>>312574402 (OP) Решение задачи по подбору количества подушек для жирафов на Python:
Для данной задачи мы можем использовать жадный алгоритм, который будет добавлять подушки с толщиной, уменьшающейся с каждой итерацией, пока не достигнем необходимой максимальной высоты.
# Пример использования n = 9 pillow_stack = get_pillow_stack(n) print("Подушки:", pillow_stack) print("Общая толщина подушек:", sum(pillow_stack))
Пояснение кода: - Мы начинаем с текущей высоты current_height, равной 0. - На каждой итерации добавляем подушку с толщиной, равной наименьшему из двух значений: разница между n и current_height, или current_height + 1. - Процесс продолжается, пока не достигнем общей высоты n. - В конце мы возвращаем набор подушек и выводим их общий вес.
Данный алгоритм позволяет создать минимальный набор подушек, необходимых для достижения всех высот от 1 до n.
>>312575574 У тебя есть множество N {1, 2...n}. Тебе нужно подобрать такое множество, чтобы для каждого элемента N в нем существовало субмножество, сумма элементов которого была бы равна этому элементу. С млекопитающими проще, не?
>>312574402 (OP) >Например, при n = 9, нужно выплюнуть 1; 2; 3; 3 А ещё можно 1; 2; 4; 2 Думал 3 минуты и решил у себя в голове. Делаешь 1, 2, 4, 8, 16 и так далее. Последнее 2^k такое, что 2^(k+1)-1 <= n, а 2^(k+2)-1 уже больше n. Другими словами сумма подушек такая, что она ещё не превышает n, но если добавить очередную подушку ещё в 2 раза больше, то сумма уже превысит n. На компьютере k можно вычислить как битовую длину числа n+1 и минус 2. Честно говоря уже подзабыл, как это делать, так что в реале я бы посчитал это позорным циклом с целочисленным делением на 2. После этого, если n имеет вид 2^(k+1)-1, то моя работа на этом закончена, а если n больше, то добавляю ещё одну подушку n-(2^(k+1)-1)
>>312575724 Пиздец, сраный робот выдал по сути то же самое решение, что и я, но в коде это выглядит намного лучше, и человеческим языком это объяснено намного понятнее мимо >>312576167
>>312576311 Это конец. Роботы превзошли людей и в высоком искусстве, и в умственной работе. Теперь человеческое искусство это рисовать сойджаков и прочие дегенеративные мемы. Вот в этом бездушная машина не может нас заменить ПОКА ЧТО. А человеческая работа это откачивать говно. Тут тоже пока не придвидется наступление искуственного интелекта
>>312574402 (OP) Детская задача хи хи хи. Уверен пидорас который придумал месяцами мозговал. Иди нннахуй. Не буду играть в твою игру. Сдался твоя задача.
>>312574402 (OP) Ответ буквально прописан в примере. Числа 1, 2, 3, 3 дают составить любую высоту 0-9, то есть любое кол-во единиц. Добавив 10, 20, 30, 30 к этому набору получим любую высоту до 99. Проще говоря - по 4 подушки на разряд числа N. Нужно только знать максимальный возможный разряд N. Ответ: Возьму N=9999, тогда набор - 1, 2, 3, 3, 10, 20, 30, 30, 100, 200, 300, 300, 1000, 2000, 3000, 3000. Гони мои 40 баллов, дядя.
>>312575724 >>312576167 Молодцы. Но обратите внимание, даже после оптимизации по двум параметрам всё ещё существуют несколько правильных ответов. Поэтому предлагаю усложнить. Теперь ответ надо оптимизировать по трём параметрам! Из всех наборов минимальной высоты и количества подушек надо выбрать такой, чтобы его максимальная подушка была минимальной. Вот так! Чтобы 1 2 3 3 подходило, а 1 2 2 4 нет. Слабо?
>>312574402 (OP) Обесните дебилу 115-айсикью условие. Например, нужно получить все целые высоты от 1 до 9 используя как можно меньше подушек разной высоты, так? И можно чтобы было несколько подушек одинаковой высоты? Тогда в этом примере: 1 = 1 2 = 2 3 = 3 3 + 2 = 5 3 + 3 = 6 3 + 3 + 1 = 7 3 + 3 + 2 = 8 3 + 3 + 3 = 9 в последней строке лишняя 3, нужно 3 + 3 + 2+1 = 9
>>312582540 Это не так сложно. Во-первых, следуем стандартному алгоритму. Например для 13 у нас получится 1 2 4 6. Смотрим на последние 2 числа. Если самое последнее оно же самое большое, то это уже ответ в том числе и на "усложнённую" задачу. Дополнительно оптимизировать там больше нечего. Аналогично, если последние 2 числа равны, или последнее на 1 меньше предпоследнего. 1 2 4 3 это наименьшая комбинация для 10, 1 2 4 8 7 это наименьшая комбинация для 22, и так далее. Предлагаю вам самим для себя доказать все вышеперечисленные факты.
Однако, если последнее число меньше предпоследнего хотя бы на 2, то между ними становится возможным перераспределение поровну. Так для нашего n=9 мы имеем 1 2 4 2, берём 4 2, и превращаем их в 3 3. Итого 1 2 3 3. При n=8 имеем 1 2 4 1, здесь 4 1 не поделятся поровну, поэтому получается 2 3, итого 1 2 2 3. Почему это работает, почему это даёт лучший результат, почему распределяются именно последние 2 числа, и почему никогда ни при каком n не будет работать распределение между тремя числами - опять таки со всеми этими вопросами предлагаю разобраться вам самим.
Я сам для себя всё доказал, но объяснять это долго. И так большой пост получился.
>>312583731 Ты многозначные цифры в своём примере где потерял? Где десять, где двадцать, где тридцать? Если не прав пусть эксперты двача поправят, желательно с пруфами.
Я, оно, алкаш алкашом, но в школе учился строго на отлично. Пускай после выпуска я поступил на гуманитарное направление и математика мне там была надобна как собаке пятое колесо, но глядя на то что ты выложил я не могу припомнить ни одной аналогии ни с математикой, ни с геометрией, ни с черчением, ни с вычислительными системами.
Предлагаю размять мозгу и порешать школьную олимпиаду по информатике. Задача такая:
В гостинице для жирафов администрация хочет запастись подушкам так, чтобы удовлетворить потребности любого своего возможного постояльца. Известно, что жирафам в зависимости от длины их шеи нужно сложить стопку подушек (в стопке одна или несколько подушек) толщиной от 1 до n сантиметров. При этом администрация хочет обойтись как можно меньшим числом подушек, а среди наборов подушек, удовлетворяющих этим требованиям, администрация выберет набор минимальной
суммарной толщины, чтобы он занимал минимальный объём в шкафу. Помогите администрации составить нужный набор подушек, позволяющий получить стопку любой высоты от 1 до n сантиметров включительно.
Например, при n = 9, нужно выплюнуть 1; 2; 3; 3 в любом порядке, потому как
1 = 1
2 = 2
3 = 3
3 + 2 = 5
3 + 3 = 6
3 + 3 + 1 = 7
3 + 3 + 2 = 8
3 + 3 + 3 = 9
За решение n <= 20 дают 20 штук баллов, а за n <= 1000 - 40.
Кто использует аналогичные монетки с литкода или любую другую помощь из зала, тот пидор