【问题标题】:Count the coins including permutations of the same sequence数硬币,包括相同序列的排列
【发布时间】:2014-03-03 19:22:51
【问题描述】:

我找到了一个代码,可以找到使用给定硬币找零的可能性: How to count possible combination for coin problem。但是,如果我们考虑相同序列的不同排列,如何计算呢?我的意思是,例如数量是12,“4 4 2 2”和“4 2 4 2”应该算2,而不是1。

【问题讨论】:

  • 硬币的变化是组合,而不是排列。
  • 那么有算法来计算排列吗?叫什么名字?
  • 您是想将这些 [1 1 1] 和 [1 1 1] 分开还是只是将 [1 2 3] 和 [1 3 2] 分开?
  • [1 1 1] 和 [1 1 1] 相同,[1 2 3] 和 [1 3 2] 不同。我忘了提到它,谢谢:)
  • 对于每个序列(例如 [1 1 2 3]),您可以将其排列为 (n1+n2+...+nk)! / (n1!*n2!*...*nk!) 不同的方式,其中ni 是这种类型的硬币数量。在 [1 1 2 3] 示例中:n1=2,n2=1,n3=1

标签: algorithm permutation combinatorics


【解决方案1】:

正如您在问题中提到的,您可以计算 How to count possible combination for coin problem 中所述的可能组合。但是为了将排列包含在您的答案中:

  1. 如果您区分相同数字 [1 7 7] 和 [1 7 7] 的排列,例如只需将每个序列(此处为 [1 7 7])计算为 n! (n = 序列中的元素数)[而不是 1]
  2. 否则:将每个序列乘以 n!/(m!l!...) 其中 m = 类型 1 的相等元素的数量,l 是类型 2 的相等元素的数量,依此类推在... 。例如,对于像 [a b b c c c] 这样的序列,您应该计算 6!/(2!*3!) [而不是 1]

所以请使用该链接中的算法,我不再重复,而是使用我所说的公式(取决于您想要的情况)而不是将每个组合计数为 1。

! 是阶乘。)

【讨论】:

  • 我想我不理解该代码中的算法。我不知道这取决于它算作 1...
  • 看看this
  • 好的,我理解并成功修改了递归版本。但是DP呢?是否也可以进行更改?
猜你喜欢
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
相关资源
最近更新 更多