给定分区元素时,计算具有 k 个部分的整数分区

Count integer partitions with k parts when partition elements given

我想用 k 个分区元素计算 n 的整数分区。可能的分区元素是通过具有不同元素的给定向量 v 定义的。可以多次选择分区元素。我怎样才能做到这一点?最优而不遍历 n.

的所有整数分区

示例:

n := 10

k := 3

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

=> 3

一种方法是让循环按顺序考虑每个元素。

未记录 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]));