Хотя метод грубой силы, вероятно, лучше всего подходит для решения этой проблемы, есть и другие приемы, которые вы можете использовать, если хотите получить приблизительное решение или метод грубой силы все еще слишком дорог.основная идея состоит в том, чтобы привязать значения к небольшой сетке, и , а затем сделать грубую силу для (намного меньшего) набора записей в сетке.
в вашем случае (делая вид, что Iуже разделены на 100), все числа между 1100 и 2000, так что вы можете «привязать» их к 10 целым числам 1100, 1200 и так далее.Максимальная ошибка при выполнении - не более 50/1100, что составляет менее 5%.Теперь вы вдвое сократили размер ввода, что заставляет грубую силу работать немного быстрее.
Опять же, я бы не рекомендовал это, если (а) грубая сила сейчас действительно медленная или (а) размер проблемы не превышает 18.
ps проблема называется SUBSET SUM (или иногда KNAPSACK в зависимости от состава) и является NP-полным. Вот ссылка на идею аппроксимации.