Ну, мне действительно не нужна помощь с самим кодом, но я понимаю, что именно я пытаюсь сделать, чтобы написать код.Вкратце, мне дано 1000 проектов, каждый из которых имеет набор ресурсов, и у меня есть (установленное количество) ресурсов, которые можно использовать для расчета лучших проектов, которые я могу выбрать.
псевдокод для лучшей прибылиФункция выглядит следующим образом:
bestProfit:
Parameters -
projects: a vector of projects
r: the resources available to solve the subinstance
valueMap: the map data structure that is used for memoization
n: only projects numbered 0,...,n-1 may be
used to solve the subinstance
Returns - the maximum amount of profit that may be obtained on this
subinstance of the optimization problem
Post-condition – If n > 0, then valueMap contains an entry
whose key is (r, n).
If n equals 0
return 0
Check valueMap to see whether this subinstance has already been solved
- If so, then return the previously computed result (function terminates)
best1 = bestProfit(projects, r, valueMap, n-1)
Check whether r provides enough resources to undertake project n-1
- If so, then best2 = bestProfit(projects, r – projects[n-1].requirements, valueMap, n-1)
+ projects[n-1].profit
Else
best2 = 0
If best1 >= best2
Store (r, n) -> (best1, false) in valueMap
Return best1
Else
Store (r, n) -> (best2, true) in valueMap
Return best2
Когда я выполняю рекурсивный вызов bestProfit, best1 должен проверять, разрешена ли уже подзадача.и best2, считается, что проверка осуществимости основана только на самом последнем проекте.другими словами это выглядит как сбалансированное дерево.Я не могу понять, как мне вставить значения на карту во время рекурсии?По сути, последнее утверждение if / else не произойдет, пока не будет пройден весь набор проектов.И только окончательное значение вставляется на мою карту.Я просто хочу несколько советов о том, как мне подходить к этому, чтобы правильно написать рекурсию.
Как я уже говорил ранее, я не ищу код, но способ понять требования этого псевдокода для моего проекта на C ++.именно эта логика сводит меня с ума в этот момент, потому что я не могу заставить ее работать вместе.Спасибо всем за то, что взглянули на это и предоставили лучшее понимание, если это возможно.