java - 获取所有可能的组合以获得给定的没有重复数字的总和

标签 java algorithm search combinations probability

我正在尝试解决数字问题:

我收到一个数字,必须计算加起来才能得到该数字的数字,有些规则使它变得更难

规则:

  • 只能是正数,总和不能包含0
  • 总和只能由6个数字组成,不能多也不能少
  • 要添加的数字可以从 1 到 45
  • 不能重复数字
  • 最大金额为255
  • 最低金额为 21
  • 一个有效的组合是 1、2、3、4、5、6,就像 6、5、4、3、2、1 或 3、4、5、1、6、2,但只算作一个组合,因为包含相同的数字但顺序不同

我一直在尝试像在背包问题中那样做,但不同的是我必须选择固定数量的数字来求和。

如果有人有解决此问题的算法想法,我将不胜感激。

最佳答案

你可以使用动态规划来解决这个问题。

dp[N][LastNumber][ElementCount] 有多少种方式产生 N 最后一个数字是 LastNumber 和元素的数量是ElementCountN = 1..255LastNumber = 1..45ElementCount = 1..6

您可以从子解决方案中获取 dp[N][LastNumber][ElementCount] dp[N-LastNumber][1][ElementCount-1] + dp[N-LastNumber][2][ElementCount-1] ... + dp[N-LastNumber][LastNumber-1][ElementCount-1]

基本情况是 dp[i][i][1] = 1 for i = 1..45

如果问有多少种方式求和M,答案是dp[M][i][6] for i = 1。 .45

关于java - 获取所有可能的组合以获得给定的没有重复数字的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39969534/

相关文章:

c - 红黑树——初始化

algorithm - 使用前缀制作特定的计数系统

jquery - 使用 jQuery 过滤带有 on data 属性的表

java - 如何修改SQL语句?

java - 为什么我在二维数组上没有得到 ArrayIndexOutOfBoundsException

algorithm - 使用强连通分量算法作为循环检测

c# - 如何在 Sitecore 中配置 Lucene 以仅索引主数据库上项目的最新版本?

mysql - SQL在同一字段中搜索多个值

java - 搜索多个 solr 核心的最佳方式

java - 线程 "main"java.lang.NoClassDefFoundError : org/bouncycaSTLe/crypto/PBEParametersGenerator 中出现异常