Помогите решить задачу на комбинатотрику

Дилан и Кейт хотят путешествовать между несколькими городами А, В, С .... Кейт имеет на листе бумаги список расстояний между этими городами. ls = [51, 56, 58, 59, 61]. Дилан устал ездить, и он говорит Кейт, что не хочет ехать больше t = 174 миль, и он посетит только 3 города. Расстояния, а значит, какие города они выберут, чтобы сумма расстояний была как можно больше, чтобы угодить Кейт и Дилану?

Пример:

Имея список ls и 3 города для посещения, они могут сделать выбор между: [51,56,58], [51,56,59], [51,56,61], [51,58,59], [51, 58,61], [51,59,61], [56,58,59], [56,58,61], [56,59,61], [58,59,61].

Тогда суммы расстояний составляют 165, 166, 168, 168, 170, 171, 173, 175, 176, 178.

Наибольшей возможной суммой с учетом ограничения в 174 есть 173, а расстояния до 3 соответствующих городов - [56, 58, 59].

Функция chooseDistance принимает параметры:

t (максимальная сумма расстояний, целое число> = 0),

k (количество городов, которые нужно посетить, k> = 1),

ls (список расстояний, все расстояния является положительными или нулевыми целыми числами, и этот список содержит по крайней мере один элемент).

Функция возвращает "лучшую" сумму, то есть наибольшую возможную сумму k расстояний, меньших или равных заданной границы t, если эта сумма существует, или если не существует - null.

Примечание: не изменяйте переменную ls.

Исходный код

const chooseDistance = (t, k, ls) => {
    // твой код
    return null;
}

chooseDistance (174, 3, [51, 56, 58, 59, 61]) // 173
chooseDistance (163, 3, [50]); // null
chooseDistance(331, 4, [50, 55, 56, 57, 58])// 331

От мой код, но тут я только сделал что б по три елемента в подмасиве, как сделать универсально?

    const chooseDistance = (t, k, ls) => {
      let results = []
    
      for (let i = 0; i < ls.length - 1; i++) {
        for (let j = i + 1; j < ls.length; j++) {
          for (let k = j + 1; k < ls.length; k++) {
            results.push([ls[i], ls[j], ls[k]]);
          }
        }
      }
    
    results = results.map(item => {
      return item.reduce((p, n) => p + n)`
    }).filter(item => item <= t)
    }
    
    console.log(chooseDistance(174, 3, [51, 56, 58, 59, 61]))
    console.log(chooseDistance(163, 3, [51]))
    console.log(chooseDistance(331, 4, [50, 55, 56, 57, 58]))

Ответы (0 шт):