Dynami c Программирование домашних заданий - PullRequest
0 голосов
/ 16 апреля 2020

Может кто-нибудь помочь мне с некоторым намеком?

1 Ответ

2 голосов
/ 16 апреля 2020

Поскольку это, вероятно, проблема с домашней работой, я не буду давать точную реализацию, но я подробно опишу алгоритм:

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

Затем мы определяем dp(i, t), где i - индекс домашней работы, которую мы учитывая, что t - это время, потраченное на следующее:

  • Если i - последний элемент домашней работы (в основном n - 1), то мы возвращаем 0, если не можем выполнить домашнюю работу вовремя (t + hw[i].time > hw[i].deadline), в противном случае мы возвращаем счет за домашнее задание.
  • Если i не последний элемент домашнего задания, если мы не можем выполнить домашнее задание вовремя, мы возвращаем dp(i + 1, t).
  • Если i не является последним домашним заданием, и мы можем выполнить домашнее задание вовремя, тогда мы возвращаем max(dp(i + 1, t), dp(i + 1, t + hw[i].time) + hw[i].score).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...