【问题标题】:How to print all the combinations N can be writen as the sum of 1, 3 and 4如何打印所有组合 N 可以写为 1、3 和 4 的总和
【发布时间】:2019-08-05 12:56:07
【问题描述】:

我需要打印出数字 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

欢迎提出任何建议,谢谢!

【问题讨论】:

    标签: python dynamic-programming


    【解决方案1】:

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

    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 解决方案提供指导。

    【讨论】:

      猜你喜欢
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多