Fail
можно написать функцию перехода в состояние n
Анна
Это перебором получается решение, так?
это называется динамическое программирование. Там не полный перебор будет, O(n*k), где n недель и k - максимум надо рабочих
Анна
Оптимальная стоимость найма k рабочих на n-й неделе: F(n, k) = min (F(n-1, k-m) + D(m)), где m - разница в количестве рабочих, может быть отрицательной, аккуратно надо. n - номер недели. k - количество рабочих, D(m) - стоимость найма разницы. И не надо брать клетки, где рабочих меньше, чем запрос на текущую неделю.
Анна
может быть, можно и проще, но это кажется сработает, только аккуратно написать
Nikolay
Блин, это просто
Nikolay
Но я не могу мысль уловить :D
Анна
Но я не могу мысль уловить :D
Сорри, у меня какое-то математическое костноязычие развилось
Nikolay
Nikolay
Типа такого?
Fail
но ведь в случае, если мы нанимаем - мы платим 400 долларов сверху
Fail
а если увольняем - только содержание оставшимся
Анна
Типа такого?
Да, только мне трудно на ночь глядя числа проверять. Смысл в том, что нанять лишнего заранее может оказаться выгоднее. Поэтому ты для каждой следующей недели берешь возможные количества нанятых и пробуешь нанять ещё или уволить. И смотришь минимум
Fail
формулы получаются сильно разные
Nikolay
Или уволить не всех
Fail
то есть для найма 400 + (n*200)
Nikolay
то есть для найма 400 + (n*200)
Ну я примерно так и считаю
Nikolay
По условию нихрена не понятно
Анна
а если увольняем - только содержание оставшимся
Вот поэтому чтобы получить 5 на какой-то неделе, надо выбрать, что выгоднее, нанять три на прошлой и потом ещё два, или нанять семь на прошлой, а потом остальных на мороз
Fail
а ведь еще мы можем перейти на следующую неделю с избытком рабочих
Fail
Анна
а ведь еще мы можем перейти на следующую неделю с избытком рабочих
Поэтому табличку заполняем до максимального нужного количества по всем неделям
Nikolay
А второй столбец как заполнять, чёт не пойму 🤔
Nikolay
Вторую неделю
Анна
сейчас
Анна
Анна
На примере одной клетки из второй недели нарисовала
Анна
Плохо видно карандаш правда
Анна
Romɑn
Во флудилка 150 сообщений!
Vladislav
Анна
Надо собраться с мыслями и нарисовать формулы обобщённые, или уже норм?
Romɑn
123 факультеты 567 курсы и один 7 с 4 факультета
Nikolay
Я вроде примерно понял
Анна
Анна
Формула такая получилась, вроде не напутала ничо
Romɑn
Russia
В росспиртппроме рассказывали что часто именно так. Кстати в ВТБ когда работал, люди которые делали "ничего" получали тоже значительно
Анна
Простите за псевдо- F#
Nikolay
Я щас на F# пытаюсь набросать
Nikolay
Сложна
Romɑn
Не для а in
Анна
Не для а in
a - это список необходимых количеств рабочих по дням недели
Анна
когда мы для недели номер n считаем, перебираем возможные количества рабочих начиная с a[n-1] и больше, потому что меньше смысла нет
Анна
и считаем за них убытки, если они лишние, и стоимость найма недостающих, чтобы на следующей неделе получилось k рабочих
Анна
в клеточку n, k мы можем разными способами попасть, выбираем наиболее выгодный
Romɑn
Так так так. @AnutaU а через сколько бросков сломанной монетки(которая всегда выпадает орлом) мы можем понять что она сломанная?
Анна
Про круглые люки главное не спрашивайте
Nikolay
Тут интересную фигню придумал
Nikolay
Как инициализировать двухмерный массив в F#, с lazy элементами, которые возвращают значения из других ячеек этого же массива?
Nikolay
Без использования mutable :)
Romɑn
Оу
Nikolay
Круто, да? :)
Анна
Без использования mutable :)
я подозреваю, что без mutable никак. Либо ты фигачишь циклом по табличке, либо пишешь рекурсию с мемоизацией. мне кажется, где-то надо запоминать посчитанное всё равно
Nikolay
Ну это получается что-то типа рекурсивного массива)
Анна
Ну это получается что-то типа рекурсивного массива)
типа у тебя lazy ячейки, которые лезут в другие ячейки, и они тогда считаются?
Romɑn
Некий seq |> Array.ofSeq
Анна
Да
где-то будет всё равно mutable state запрятан же всё равно, или я туплю?
Nikolay
Хотя по идее может рекурсия даже возникнуть :)
Анна
видимо, в реализации lazy библиотечного
Nikolay
Ну да, в реализации там должно быть такое
Romɑn
А вложенность этих ссылочных ячеек какая?
Nikolay
У меня вообще идея эта возникла, когда думал о решении этой задачи, типа сделать таблицу с lazy элементами, которые будут лазить в другие ячейки, и рассчитывать значения
Nikolay
Но это слишком сложно
Romɑn
Всмысле?
Всмысле одна ячейка ссылается на вторую - вложенность 1. Одна ссылается на другую а та на третью - вложенность 2
Nikolay
Но чисто как отдельная задача с элементами массива внутри lazy, показалось интересной, вот и поделился
Romɑn
И т.д. а то может массив из n элементов а значение всего одно
Nikolay
Всмысле одна ячейка ссылается на вторую - вложенность 1. Одна ссылается на другую а та на третью - вложенность 2
Ну вообще, по идее ограничений не должно быть, главное чтобы в рекурсию не ушло
Анна
Но чисто как отдельная задача с элементами массива внутри lazy, показалось интересной, вот и поделился
концептуально получается мемоизация за счёт этих lazy походу и правда