Необычная задача. Миниммумер. Доказательная задача (Exact PG)

Теорема Байеса: следствие указывает причину

Сложность: 1/3

Эта теорема говорит, насколько нужно изменить ожидания, когда мы узнаём новый факт или наблюдаем новое свидетельство.

Условие задачи: Энтомолог нашёл жука с узором на корпусе и надеется, что это редкий подвид. Надежда его основана на том, что жуки редкого подвида в 98% случаях с узором, а среди обычных жуков узор имеют только 5%. Редкий подвид действительно редок: таких жуков всего 0,1% от всей популяции.

Вопрос: Какова вероятность, что найденный жук с узором относится к редкому подвиду?

Теорему Байеса и связанную с ней формулу полной вероятности лучше всего изучать на задачах, подобных этой. Самое сложное, что вас ждёт, — это вычисление дробей и рисование древовидных диаграмм. По этой ссылке можно посмотреть и доказательство формулы, и несколько примеров.

Необычная задача. Миниммумер. Доказательная задача (Exact PG)
В любой непонятной ситуации рисуй диаграмму полной вероятности. Энтомолог, прости, но жук, скорее всего, обычный.

Приз Archon Genomics X

Порождающие головную боль математические задачи — это слишком сложно? Приз Archon Genomics X требует меньше знаний математики. За приз в $10 млн вам нужно создать устройство, которое сможет упорядочить 100 геномов человека в течение 10 дней с точностью до одной единственной ошибки на 100 000 частей ДНК. Да, и стоимость должна быть ниже $ 10000.

В отличие от математических задач, это открытие может сделать чертовски много для человечества, а не просто поставить числа вместе. Упорядочивание генома может стать мейнстримом, помочь обнаружить будущие риски для здоровья, сделать индивидуальные лекарства и составить собственный план здоровья.

Кроме того, $ 10 миллионов долларов — это фантастическая сумма.

5: Распределение: главное — график

Сложность: 1/3

Распределение — просто закон соответствия одной величины другой. Например, в теории вероятностей, где появился этот термин, это было соответствие между значением случайной величины и вероятностью того, что она примет это значение.

Необычная задача. Миниммумер. Доказательная задача (Exact PG)
Распределение вероятностей для граней игрального кубика — прямая линия на уровне ⅙, или 16,67% вероятности

Но дата-сайентисту распределения требуются не для вероятностей, а чтобы понять, какой именно процесс скрывается за данными. Поэтому ему (то есть вам) нужно запомнить названия, графики и параметры всех , благо их не так много.

Необычная задача. Миниммумер. Доказательная задача (Exact PG)

Например, у знаменитой гауссианы, или нормального распределения, есть всего два параметра, которые влияют на форму графика: μ (произносится «мю»), двигающий «колокол» вправо-влево, и σ (сигма) — определяющий одновременно и ширину, и высоту.

Задача пятая

Тут есть простор для творчества. Мой код таков:

Мне кажется, в таком виде его проще всего и
писать и читать и тестировать. Тут у меня три функции:
— итератор, который выдает все
числа для операций (в терминах задачи: вставляет пустые места);
— выдаёт все возможные сочетания знаков
и заданной длинны (для единообразия, это тоже
итератор с рекурсией);
— выполняет операции.

Тут, конечно, просится решение, избавленное от
if-ов и кодирования операций с помощью символов. Но
это решение будет более громоздким, о нём можно
рассказать, но и писать, и читать его дольше.
Лично я вышел бы за рамки отведённого часа.

Наверняка вам по душе будет какое-то иное решение.
Мой пример — лишь одна из возможных реализаций.

Вместо заключения

Где можно взять таких задачек?
Можно начать с Project Euler.
Там, правда, немного более математизированные задачки,
но это и не плохо. И сложность задач расчёт очень быстро.
Я решил восемьдесят.

Если вы знаете ресурсы с хорошими задачками — пожалуйста
напишите мне.

upd: В моём решении пятой задачи Мерзляков Александр из Уфы
нашел неточность. Спасибо! Я поправил. Получается, что я на
эти решения потратил больше часа.

Отправить

Матрица — это преобразование

Сложность: 1/3

Внешне матрица — это прямоугольная таблица из m строк и n столбцов, состоящая, как правило, из чисел. Если в матрице только одна строка или только один столбец, то получается вектор. Вектор — это тоже матрица.

Матрицы можно умножать на число, а матрицы одинакового размера — ещё и складывать между собой поэлементно. Умножение матрицы на матрицу сложнее, чем умножение чисел, и лучше всего постигается в упражнениях. Главное — помнить, что строка умножается на столбец и что менять местами две умножаемых матрицы нельзя.

Необычная задача. Миниммумер. Доказательная задача (Exact PG)
Строка матрицы А поэлементно умножается на столбец матрицы B, затем результат складывается в элемент на позиции {номер строки из А, номер столбца из B}.

Матрицу правильнее всего понимать как «численный протокол» некоего преобразования. Например, чтобы преобразовать один вектор в другой, нужно умножить его на соответствующую матрицу. Более сложные преобразования тоже задаются или матрицами, или похожими на них объектами, например тензорами (которые сами состоят из матриц).

Выбор и создание новых признаков

Выбор и создание новых признаков зачастую оказывается одним из самых «благодарных» занятий по соотношению усилия/вклад в результат. Для начала, пожалуй, поясню что это такое:

  • Создание новых признаков (Feature engineering): процесс при котором берутся данные как они есть и затем на основе имеющихся данных конструируются новые признаки. Это может означать изменение непосредственно самих значений, например логарифмирование, взятие корня, или one—hot encoding категориальных признаков для того чтобы модель могла их эти признаки обработать. Иногда это создание совершенно новых признаков, которые раньше явным образом в данных не содержались, но, в общем, это всегда добавление в набор новых признаков, полученных из первоначальных данных.
  • Выбор признаков (Feature selection): процесс выбора наиболее релевантных признаков. При этом из набора удаляются признаки для того чтобы модель уделила больше внимания и ресурсов первостепенным признакам, а также это помогает получить более легкоинтерпретируемые результаты. В общем, это чистка набора при которой остаются только наиболее важные для нашей задачи данные.

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

Популярные статьи  Этюд Сокольского

На данном этапе я выполнил следующую последовательность действий:

  • One-hot кодирование категориальные признаков (район и тип здания);
  • Логарифмирование числовых данных.

One-hot кодирование необходимо выполнить для того, чтобы модель могла учесть категориальные признаки. Модель не сможет понять, что имеется ввиду, когда указано, что здание используется как “офис”. Нужно создать новый соответствующий признак и присвоить ему значение 1, если данная запись содержит сведения об офисе и 0 в противном случае.

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

Приведенный ниже код этим и занимается: логарифмирует числовые признаки, а так выделяет два упомянутых категориальных признака и применяет к ним one-hot кодирование. Затем объединяет полученные при этом наборы. Звучит довольно утомительно, но Pandas позволяет это проделать относительно легко.

В итоге в нашем наборе теперь всё ещё 11,000 записей (зданий) и 110 колонок (признаков). Не все эти признаки одинаково важны для нашей задачи, так что перейдем к следующему шагу.

Выбор признаков

Многие из 110 признаков для нашей модели избыточны, т.к. некоторые из них сильно коррелируют. Например, зависимость Site EUI от Weather Normalized Site EUI, которая имеют коэффициент корреляции 0.997.

Необычная задача. Миниммумер. Доказательная задача (Exact PG)

Признаки, которые сильно коррелированны, называют коллинеарными, и достаточно оставить один из таких признаков, чтобы помочь алгоритму лучше обобщать и получать более интерпретируемые результаты на выходе (на всякий случай уточню, что речь идет о признаках коррелированных между собой, а не с целевым признаком, последние очень даже помогают нашему алгоритму.)

Есть много способов поиска коллинеарных признаков, например, один из широко используемых — расчет коэффициента увеличения дисперсии. Сам я решил использовать так называемый thebcorrelation коэффициент. Один из двух признаков будет автоматически удален если коэффициент корреляции для этой пары выше 0.6. Посмотреть как именно это было реализовано можно в той же тетрадке (и на форуме Stack Overflow)

Выбор именно такого порога может показаться необоснованным, но он был установлен опытным путем, при решении этой конкретной задачи. Машинное обучение наука в значительной степени экспериментальная и зачастую сводится к произвольному поиску лучших параметров безо всякого обоснования.  В итоге оставим всего  64 признака и один целевой.

# Remove any columns with all na values
features  = features.dropna(axis=1, how = 'all')
print(features.shape)

(11319, 65)

Задача №3

Жарим котлеты.

Мы располагаем сковородой, на которую помещается две колеты. Нам необходимо пожарить три котлеты за 3 минуты, при том, что одна сторона котлеты жарится ровно 1 минуту (котлеты необходимо прожарить с обеих сторон).

Вопрос: Как прожарить котлеты?

Ответ

1 минута: кладем первую и вторую котлеты, жарим с одной стороны.

2 минута: переворачиваем первую котлету; вторую (прожаренную с одной стороны) убираем и вместо нее кладем третью котлету (полностью сырую).

3 минута: убираем со сковороды первую полностью прожаренную котлету; переворачиваем третью котлету, жарим до конца и возвращаем вторую прожаренную с одной стороны котлету, её тоже жарим до готовности.

Вуаля. Котлеты поданы.

Задача №5

Мудрецы и колпаки.

Царь решил проверить своих троих мудрецов на мудрость, пригласил их и сказал: «Мудрецы, у меня есть 5 колпаков – 3 из них черные, а 2 белые. Сейчас вы закроете глаза, и я надену на ваши головы эти колпаки, при этом вы не будете знать, колпак какого цвета у вас на голове, но будете видеть колпаки других мудрецов». После осуществленных действий мудрецы открыли глаза и долго-долго молчали. Затем один из мудрецов произнес: «На моей голове черный колпак!» И он был прав.

Вопрос: как мудрец догадался?

Ответ

После того, как мудрецы открыли глаза, они долго-долго молчали, что является ключевой фразой, потому что если бы один из мудрецов увидел на двух других белые колпаки, то он бы сразу понял, что на нем черный колпак. Поэтому первый важный вывод: на головах мудрецов нет двух белых колпаков. Соответственно, есть либо один белый, либо вообще нет.

Далее. Наши мудрецы: А, Б и В. Догадался о том, что на нем черный колпак мудрец А. Проследим ход его мыслей:

«Предположим на мне белый колпак, тогда мудрец Б, глядя на меня рассуждал бы так: «Возможно, на мне белый колпак, получается на мудреце А тоже белый колпак, тогда мудрец В сразу же сказал бы, что на нем черный колпак, но этого не происходит, значит на мне черный колпак», но ведь он не говорит, что на нем черный колпак! Значит, мое предположение неверно, и он не видит на мне белого колпака. Значит мой колпак черный!»

Да, такая вот интересная задача.

Помимо задач хотелось бы предложить загадки с подвохом. По возможности уделите время их решению, это будет увлекательно.

Задачи тысячелетия математического института Клэя

В 2000 году математический институт Клэя представил список из семи самых печально известных математических проблем. И тому, кто решит хотя бы одну, получит $1 млн. С 2000 года была решена только одна из них.

Григорий Перельман, российский математик, доказал теорему Пуанкаре, разрешить которую пытались аж с 1904 года. Тем не менее, он потратил столько лет на эту проблему, что в значительной степени выпал из общества, отказавшись от медали Филдса (высшей награды в математике) и никогда не претендовав на миллион долларов, сославшись на свое разочарование в математике. Так что, если вы хотите сойти с ума подобным образом, вас ожидают еще шесть задач.

Одной из таких проблем является решение уравнения P = NP. Задача впервые была предложена в 1971 году. Нестрого говоря, проблема равенства P = NP состоит в следующем: если положительный ответ на какой-то вопрос можно быстро проверить (за полиномиальное время), то правда ли, что ответ на этот вопрос можно быстро найти.

Популярные статьи  Мат в 2 хода. Подборка задач Уильяма Шинкмана

Например, верно ли, что среди чисел {−2, −3, 15, 14, 7, −10, …} есть такие, что их сумма равна 0 (задача о суммах подмножеств)? Ответ да, потому что −2 −3 + 15 −10 = 0 легко проверяется несколькими сложениями (информация, необходимая для проверки положительного ответа, называется сертификатом). Следует ли отсюда, что так же легко подобрать эти числа? Проверить сертификат так же легко, как найти его? Кажется, что подобрать числа сложнее, но это не доказано.

Уловили? В принципе, это решение одной проблемы дважды, только числа меняются. В настоящее время это крупнейшая проблема в теоретической информатике. Было множество людей, которые пробовали свои силы, но все они потерпели неудачу. Ближе всего к решению были в 2010 году, решив только часть задачи.

Лишнее колесо

В жизни каждого автомобилиста случается поменять колесо у любимого железного коня. Повезло и мне…

Большинство (наших, конечно, американцы выше этого) совершают эту манипуляцию быстро и просто: поставил на ручник, включил первую, открыл багажник, достал запаску, ключ, домкрат, упоры, снял, поставил, закрутил гайки, поехал. Тот, кто не помнит последовательность действий, зовет друга, специалиста и т.д.
Вот и я, однажды, понимая необходимость произвести эту процедуру прямо сейчас, паркуюсь, глушу мотор, далее по схеме

И, когда настает момент закрутить гайки, я задеваю газетку со всеми четырьмя гайками ногой, и они летят в канализационный слив, который, как известно, всегда оказывается там, где мы кладем самое важное и, что характерно, не имеющее замены.
Сижу, курю, грущу. Мимо идет гений лет двенадцати и быстро вникнув в ситуацию, выдает: «Да все просто! …»

Как он мне помог? 

Задачи на выполнение расчётов и решение уравнений

Этот тип задач, пожалуй, самый распространённый. Ещё с глубокой древности подобные задачи были включены в книги и учебники по арифметике. Многим они покажутся довольно простыми, на уровне школьной программы. Но не забывайте, что наша цель — проверить умение рассуждать и оперировать некоторым количеством цифр, а не открыть в соискателе гениального математика.

Вот пример такой задачи.

Задача про кенгуру

В австралийском зоопарке 35% всех кенгуру серые. 13% всех животных зоопарка — кенгуру, но не серые. Сколько процентов от всех животных в зоопарке составляют кенгуру?

Введём обозначения:

  • a — общее количество животных в зоопарке;
  • s — количество серых кенгуру;
  • k — количество всех кенгуру.

Первое утверждение из задачи можно записать так: 0,35×k=s.

Второе утверждение из задачи можно записать так: 0,13×a=k−s. Или: 0,13×a=k−0,35×k.

Последовательно упростим это уравнение: 0,13×a=0,65×k.

Получаем a=5×k или k=1/5×a. То есть k составляет 20% от a. Значит, в зоопарке 20% животных — это кенгуру.

Вот ещё одна весьма любопытная задача.

Задача об основном вопросе Вселенной

Из книги «Автостопом по Галактике» мы знаем формулировку основного вопроса жизни, Вселенной и всего остального: «Что получится, если умножить шесть на девять?» Известен также и знаменитый ответ на этот вопрос — 42. В какой системе счисления этот ответ будет верным?

В тринадцатеричной системе счисления: 6×9=4×13+2.

Алгоритм составления задач на выполнение расчётов и решение уравнений

  1. Придумываем один или несколько ответов — целые числа.
  2. Составляем систему из одного или нескольких уравнений, решением которых будут числа, полученные на шаге 1, или выполняем ряд несложных математических или иных преобразований с этими числами. В итоге получаем коэффициенты уравнений или результаты математических преобразований.
  3. Придумываем историю, описывающую коэффициенты или результаты преобразований.
  4. Просим решить задачу, не упоминая при этом, что она связана с уравнением или преобразованиями.

Новая задача 8

Перед выпуском нового релиза системы два тестировщика — Фаддей и Фиона — проверили 100 тестов. Тестировщик Фаддей работал на 5 часов дольше Фионы и проверил на 10 тестов больше. Но Фиона работает быстрее Фаддея на 50%. Сколько времени работал каждый тестировщик?

Сначала найдём скорость работы Фаддея 10/5=2 теста в час. Фиона работает быстрее Фаддея на 50%, значит скорость её работы — 3 теста в час. Когда Фиона и Фаддей работали вместе, они проверили 100−10=90 тестов. Каждый час оба тестировщика проверяют 2+3=5 тестов. Разделим 90 на 5 и получим 18 часов — это время совместной работы Фионы и Фаддея. Но Фаддей работал дольше на 5 часов: 18+5=23 часа.

Фиона работала 18 часов, Фаддей — 23 часа.

Проверяем: 3×18+2×23=100.

Новая задача 9

В магазине электроники новая модель телефона сначала подорожала на 10%, а потом подешевела на 10%. После этого телефон стал стоить 93555 рублей. Сколько телефон стоил до подорожания?

После подорожания телефон стоил 110%, то есть 1,1 от первоначальной цены. После удешевления его цена будет равна: 1,1×0,9=0,99. То есть 99% процентов от начальной цены. Значит, до подорожания телефон стоил 93555/0,99=94500 рублей.

Градиент — это направление

Сложность: 2/3

Градиент, если простыми словами, это вектор-указатель. Стрелка указывает в направлении наибольшего роста какой-нибудь величины, а длина этого вектора соответствует скорости роста этой величины.

Необычная задача. Миниммумер. Доказательная задача (Exact PG)
Градиент высоты: чем быстрее растёт высота горы, тем длиннее вектор

Векторы обычно рассматривают не в одной точке: точками покрывают сразу весь интересующий участок — и на нём уже рисуют градиенты. Если к этому добавить цвет, чтобы подчеркнуть размеры и направленность векторов, то получаются занятные абстрактные композиции.

Необычная задача. Миниммумер. Доказательная задача (Exact PG)

В deep learning процесс обучения нейросети состоит в том, что мы много-много раз меняем вес каждого нейрона (его авторитет) в зависимости от размера ошибки, которую он передал нейронам следующего слоя. Совокупность величин этих ошибок образует поверхность в многомерном пространстве весов. Задача — найти минимум этой поверхности, то есть «яму» или «ложбину», где ошибки будут наименьшими.

Необычная задача. Миниммумер. Доказательная задача (Exact PG)

Паранормальное соревнование

Приз в $ 1 млн предложил Образовательный фонд Джеймса Рэнди любому, кто сможет доказать, что паранормальные явления реальны. Впервые, это заявление было сделано Рэнди в гостях на радио-шоу в Великобритании в 1968 году. Звонивший сказал Рэнди, что ему следует поумерить свой скептицизм, тогда он предложил $ 100 первому, кто сможет доказать, что призраки или привидения существуют. С тех пор он все увеличивал и увеличивал награду, пока она не составила $1 млн.

Популярные статьи  Шахматная жизнь Василия Иванчука

Но это не так-то просто. Одних разговоров с призраками с помощью доски для спиритических сеансов мало. Вы должны представить уйму доказательств, пройти кучу интервью и тестов, чтобы удовлетворить все правила. И даже тогда правила гласят, что Рэнди не признает, что сверхъестественное реально, он просто скажет, что вам удалось пройти испытание, вернет ваши деньги и останется при своем мнении.

Не то, чтобы подобный инцидент имел место быть. С 1968 года никто не прошел и даже не был близок к выигрышу. Некоторые медиумы, Сильвия Браун и Розмари Альтеа нашли отговорки, чтобы в этом не участвовать, либо попытались, но с треском провалились.

Что спрашивают в Microsoft

4. У вас бесконечный запас воды и два ведра — на 5 литров и 3 литра.

Вопрос: Как вы отмерите 4 литра?

Ответ: Наполните водой пятилитровое ведро и вылейте часть воды в трехлитровое. У вас сейчас 3 литра в маленьком ведре и 2 — в большом. Опустошите маленькое ведро и перелейте туда оставшиеся 2 литра из большого. Снова наполните большое ведро и перелейте из него воду в малое. Там уже есть 2 литра воды, так что долить придется литр, а в большом останется 4 литра.

5. У вас два отрезка веревки. Каждый таков, что если поджечь его с одного конца, он будет гореть ровно 60 минут.

Вопрос: Имея только коробку спичек, как отмерить с помощью двух отрезков такой веревки 45 минут (рвать веревки нельзя)?

Ответ: Один из отрезков поджигается с двух концов, одновременно с этим поджигается второй отрезок, но с одного конца. Когда первый отрезок догорит полностью, пройдет 30 минут, от первого также останется 30-минутный отрезок. Поджигая его с двух концов, получим 15 минут.

Как узнать самый тяжелый шар за 2 взвешивания?

Задача головоломка от компании Google.

Этой задаче точно  более 10 лет. Но ее предлагают решить при поступлении в компанию Google.

Задача:

Перед вами на столе 8 шаров. Можно ли и если «ДА», то как вычислить самый тяжелый шарик за 2 взвешивания?

Ответ

Обычно я видел быстрый ответ Да и далее решение. Но в условии не сказано, какие весы у вас есть. Если современные цифровые или стрелочные — то за два раза решить не получиться.

Для решения нужны рычажные весы с двумя чашками. Чтобы определять больше — меньше.

Тогда все просто:

  • На каждую чашу весов кладем по 3 шара. Два осталось.
  • Есть три варианта:
  1. Весы в равновесии. Определяем  из двух оставшихся вторым взвешиванием самый тяжелый.
  2. Одна чаша тяжелее. Тогда при втором взвешивании кладем на весы по одному шару из тяжелой группы. Если вес равен — третий шар самый тяжелый. А если нет — то из взвешивания и так понятно, какой тяжелее.

Решаем вручную

Самый очевидный выход

Это полный перебор, конечно! Из трёх предметов можно составить всего восемь комбинаций. Подсчитаем стоимость для каждой и выберем самый выгодный вариант:

Необычная задача. Миниммумер. Доказательная задача (Exact PG)

Пока предметов только три — вполне себе годное решение, но добавим ещё один — и вариантов станет 16, а для пяти их будет уже 32.

С добавлением каждого нового предмета число комбинаций удваивается, так что сложность такого алгоритма — O(2n). Это медленный способ.

Приблизительное решение

Применим так называемый жадный алгоритм: на каждом шаге добавляем в рюкзак самый дорогой предмет, пока лимит веса не превышен.

В случае с нашими предметами — одним шагом дело бы и закончилось. Мы сразу же взяли бы бензопилу за 3 000 долларов, потому что она самая дорогая. А при добавлении любого нового предмета в рюкзаке уже был бы перевес.

Было ли наше решение оптимальным? Нет, потому что гитару на пару с ноутбуком наш рюкзак тоже выдержит, но стоят они 1 500 долларов + 2 000 долларов = 3 500 долларов, что больше 3 000 долларов.

Оптимальное решение

Воспользуемся приёмами динамического программирования. Разобьём задачу на подзадачи и будем последовательно их решать. При этом на каждом следующем шаге используем результаты предыдущего.

Наглядно это можно представить в виде таблицы. Её ещё называют таблицей мемоизации. Столбцы нашей соответствуют килограммам (от одного до четырёх), а строки — предметам (гитара, бензопила, ноутбук).

1 кг 2 кг 3 кг 4 кг
гитара
бензопила
ноутбук

Таблица до заполнения

На пересечении, в ячейках, будем записывать общую стоимость предметов в рюкзаке.

Гитара

Для каждого столбца (та или иная грузоподъёмность рюкзака) нужно решить: класть гитару в рюкзак или нет.

Так как гитара весит всего один килограмм, то она влезет уже на первом шаге. Поэтому в каждой ячейке первой строки напишем 1 500 — стоимость гитары.

Мы заполнили строку целиком и узнали, что промежуточный максимум для рюкзака в четыре килограмма составляет 1500 долларов.

1 кг 2 кг 3 кг 4 кг
гитара 1 500 1 500 1 500 1 500
бензопила
ноутбук

Таблица для первого предмета — гитары

Бензопила

На следующем этапе рассматриваем двух кандидатов — гитару и бензопилу.

В рюкзаки, рассчитанные на один, два или три килограмма, бензопилу не положить, так что оставляем там гитару и максимум стоимости вещей 1 500 долларов. А вот для случая «четыре килограмма» обновляем максимум: кладём бензопилу стоимостью 3 000 долларов.

1 кг 2 кг 3 кг 4 кг
гитара 1 500 1 500 1 500 1 500
бензопила 1 500 1 500 1 500 3 000
ноутбук

Таблица для двух предметов — гитары и бензопилы

Ноутбук

Добавим последний предмет — ноутбук.

Для первых двух столбцов ничего не меняется, так как ничего, кроме гитары, в рюкзаки с грузоподъёмностью один и два килограмма положить не получится.

Зато в трёхкилограммовый рюкзак уже можно вместо гитары положить ноутбук — он дороже, обновляем максимум в этом столбце до 2 000 долларов.

Интереснее всего ситуация в последней ячейке: мы можем положить ноутбук, но он весит всего три килограмма, ещё один килограмм остаётся свободным.

И вот тут, наконец, пригодятся промежуточные результаты: мы узнали на предыдущих шагах максимальную стоимость для рюкзака, который выдерживает один килограмм, — она равна 1 500 долларов.

В итоге получаем ноутбук + гитара = 3 500 долларов, это больше предыдущего максимума в 3 000 долларов. Так что ответ в задаче — 3 500 долларов.

1 кг 2 кг 3 кг 4 кг
гитара 1 500 1 500 1 500 1 500
бензопила 1 500 1 500 1 500 3 000
ноутбук 1 500 1 500 2 000 3500

Таблица для всех трёх предметов

В общем случае формула для стоимости в каждой ячейке выглядит так:

S = max (S, цена i-го предмета + S),

где i — номер строки, j — столбца.

Оцените статью
Павел Алексеев
Добавить комментарии

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Необычная задача. Миниммумер. Доказательная задача (Exact PG)
Защита грюнфельда
Тактика в защите Грюнфельда