Это кажется довольно сложным вопросом. Я думаю, что на самом деле это фундаментальная проблема информатики, которую вы пытаетесь решить. Вы можете взглянуть на проблему рюкзака в вики для дальнейшего теоретического обсуждения, поэтому я не верю, что вы получите как простые, так и совершенно правильные ответы. (https://en.wikipedia.org/wiki/Knapsack_problem)
В любом случае, если значения c1 достаточно просты, скажем, целые числа (без дробей или действительных чисел), вы можете использовать метод динамического программирования, то есть решить множество подзадач, похожих на ваш вопрос, но для суммы ниже 24 и для менее строки то что есть. Объединение их вместе может помочь вам решить сложный вопрос.
Позволяет определить SubProb (N, i) = решение для суммы N в c1, используя только строки 1 ... i.
Если это так, SubProb (N, i) = min (взятие экземпляра из i-й строки, без взятия какого-либо экземпляра из i-й строки). Тезисы все варианты доступны.
в этом случае это минимум двух простых задач:
- Взяв экземпляр из i-й строки, это означает, что теперь вам нужно взять только Ni больше из c1 и все еще может использовать только 1 ... i строк, так что это значение SubProb (Ni, i), + c2 я.
- Не брать ни одного экземпляра в i-й строке, то есть вы можете просто взять результат SubProb (N, i-1).
Теперь мы вычислим все эти задачи вплоть до SubProb (24,14) в умном порядке и получим желаемый ответ. Самый простой способ сделать это - поместить их в таблицу с осью N, так что легко получить значения без большого количества рекурсивных накладных расходов.
Я реализовал это для вас в файле Excel, вот ссылка. Если вы хотите сделать это при большем значении i или N, просто растяните таблицу, перетащив последнюю строку и ее столбец инструментом расширения (крошечный черный крестик в углу ячейки). Его можно найти по этой ссылке:
https://drive.google.com/open?id=1K0iROL9mb2NURM7Q0oUKzAFH4jNxNGtk
Да, и ответ 464.