如何打印所有组合N可以写为1、3和4的总和

阿耳emi弥斯

我需要打印出数字N可以表示为1,3,4之和的不同方式。

例如n = 5:

  • 1 +1 +1 +1 +1
  • 1 + 4
  • 4 + 1
  • 1 + 1 + 3
  • 1 + 3 + 1
  • 3 +1 +1

我正在使用动态编程解决方案来查找n可以写为1,3,4之和的可能方式的数量


    for i in range(4, n + 1): 
        DP[i] = DP[i - 1] + DP[i - 3] + DP[i - 4] 

    return DP[n]

可行,我得到了可以表达N的可能方法的数量,在这种情况下为6,但是我不确定如何打印出所有不同的方法:

  • 1 +1 +1 +1 +1
  • 1 + 4
  • 4 + 1
  • 1 + 1 + 3
  • 1 + 3 + 1
  • 3 +1 +1

任何建议都值得欢迎,谢谢!

schwobaseggl

此递归生成器将产生实际的组合:

def combis(n):
    if n < 0:
        return
    if n == 0:
        yield []
    for x in (1, 3, 4):
        for combi in combis(n-x):
            yield [x] + combi

>>> list(combis(5))
[[1, 1, 1, 1, 1], [1, 1, 3], [1, 3, 1], [1, 4], [3, 1, 1], [4, 1]]

当然,这不是DP,而是简单的未缓存和性能不佳的递归实现。但是它应该为DP解决方案提供指导。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

查找在一定范围内的N个非重复数字的所有可能组合,这些组合的总和为X

总和为目标值的集合的所有可能组合

用多个列表查找总和为N的所有组合

如何以N的总和返回所有唯一数字组合

如何查找所有长度为5且将1位数字和4个字母划分为所有组组合的字符串

查找1和2的所有组合,总计N

查找给定总和的-1和1的所有组合

打印3D向量的所有组合

使大小为k的所有组合从1到数字n

给定1至10个元素的数组的4个数字。查找3个数字,它们的总和可以生成所有四个数字?

查找并打印每个总和为100的唯一组合,并返回所有此类组合的计数(1至100之间的数字)

生成所有可能的3个正整数,总和为N

Pandas DataFrame,如何删除总和为0的所有列和行

从大小为n的数组中打印大小为r的所有组合

设计不同的类以计算和打印以下序列(1/2)+(2/3)+(3/4)+(4/5)+(5/6)+ ......的总和。 ... +((n-1)/ n)

打印大小为m * n的矩阵中的所有元素组合

1 + 2的所有组合加到n

如何创建一个xsl模板,该模板可以将元素的名称和值写为KVP,然后递归处理所有同级节点和子节点

递归回溯打印长度为 N 的二进制数的所有组合而不使用循环

构造大小为 N 的 1 和 -1 数组 A,使得所有 A[i]*A[j] 的总和为最小值和正数。1 <= i < j <= N

如何生成总和为 1 的三个变量的所有可能组合

你如何得到n个可被10整除且总和为100的数字的所有组合?

获取总和为 11 的所有 3 位数字,或者我们可以在 JS 中说模块为 1

python:如何创建以元组形式为A和B的整数生成所有可能组合的东西

Google Sheets:当给定元素在一行中时,如何获得具有 1、2、3 和 4 个元素的所有组合(不重复)?

如何打印json对象数组以将所有值打印为类别和子类别

编写程序打印大小为 N 的数组的所有元素的总和,其中 N 可以是 1 到 100 之间的任何整数

如何打印所有连续负值的总和

大小为 n 算法的所有可能组合和排列