Подсчет целых разделов с k частями, когда заданы элементы разбиения - PullRequest
1 голос
/ 19 февраля 2020

Я хочу посчитать целочисленные разделы n с k элементами разделов. Возможные элементы разбиения определяются через данный вектор v с различными элементами. Элементы перегородки могут быть выбраны более одного раза. Как я могу это сделать? Оптимально без перебора всех целочисленных разбиений n.

Пример:

n := 10

k := 3

v := 1,2,6,7,8

=> 3

1 Ответ

1 голос
/ 20 февраля 2020

Один способ состоит в том, чтобы повторение рассматривало каждый элемент по порядку.

Немеченый JavaScript:

function f(n, k, v, i=0){
  if (k == 0)
    return n == 0;

  if (i == v.length)
    return false;
  
  let total = 0
  
  while (k >= 0 && n >= 0){
    total = total + f(n, k, v, i+1);
    k = k - 1;
    n = n - v[i];
  }
  
  return total;
}

console.log(f(10, 3, [1,2,6,7,8]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...