python-3.x 整数分割成正好k个部分的次数(计算大整数)

2wnc66cl  于 2023-08-08  发布在  Python
关注(0)|答案(1)|浏览(100)

关于python-integer-partitioning-with-given-k-partitions
我想找到这样的分区的 * 数量 *(其中最小部分等于1),但下面的解决方案(在线程和许多其他线程中)给出了这样一个整数分成k个部分的精确分区。
由于该算法是递归的,并给出每个分区,我想它可能会帮助我用记忆法或动态编程来计算这样的分区的数量,但我无法想出一个好的解决方案。
例如,对于n=7k=2,结果将是res=3,而不是res=[[1,6],[2,5],[3,4]]

oyt4ldly

oyt4ldly1#

在参考Mathematica Integer partition of n into k parts recurrence中的线程后,提出了以下解决方案:

def p(n: int, k: int) -> int:
   memo: list[list[int]] = [[0 for _ in range(k+1)] for _ in range(n + 1)]
   for i in range(1,n + 1):
       memo[i][1] = 1

   for i in range(2,n + 1):
       for j in range(2, k+1):
           memo[i][j] += memo[i-1][j - 1]
           if i - j >= j :
               memo[i][j] += memo[i - j][j]

   return memo[n][k]

字符串

相关问题