Я не буду отвечать на ваш вопрос с помощью кода, так как это похоже на домашнюю работу. Вы также остановились, когда вы действительно должны начать кодировать!
Проблема в другом типе вопроса типа "возврат возврата". Это активный алгоритм, который пытается решить задачу с помощью самого большого шага, который он может сделать.
Вы должны иметь два вектора paralell:
{ 40, 7, 1 } // hours worked (week, day, hour)
{ 200, 45, 2 } // salary for each item above.
Обратите внимание, что первый вектор отсортирован и что каждая позиция совпадает с той же позицией во втором. В вашем примере цель 59.
Для каждой позиции в первом векторе вы должны делиться на свои цели и комментировать оставшиеся.
Например, для первой позиции наибольшая сумма равна 1, для второй - 2 ...
First step:
( 59 / 40 ) == 1
( 59 % 40 ) == 19
Second step:
( 19 / 7 ) == 2
( 19 % 7 ) == 5
Third step:
( 5 / 1 ) == 5
( 5 % 1 ) == 0
Вы, наконец, получите вектор, такой же, как первый с результатами:
{ 1, 2, 5 } // one week, two days and five hours.
Чтобы показать результаты, просто переберите вектор и умножьте каждую позицию на ту же позицию во втором векторе:
1 week(s) ( 1 * 200 )
2 day(s) ( 2 * 45 )
5 hour(s) ( 5 * 2 )
( 1 * 200 ) + ( 2 * 45 ) + ( 5 * 2 ) = 300
Таким образом, вы получите нужный вам результат.