algorithm - 将一组数字的元素相加到给定的数字
问题描述
我一直在努力提出一种算法来解决这个问题。假设我有一组数字{1, 2, 5}
,并且这个集合中的每个元素都是无限供应的,我给了另一个数字 6,然后要求确定可以将元素相加得到数字 6 的方法的数量。为了说明目的,我做了这个
1 + 1 + 1 + 1 + 1 + 1 = 6
1 + 1 + 2 + 2 = 6
2 + 2 + 2 = 6
1 + 5 = 6
1 + 1 + 1 + 1 + 2 = 6
所以在这种情况下,程序将输出 5 作为路数。再次假设您要找到 4 的总和,
1 + 1 + 1 + 1 = 4
2 + 2 = 4
1 + 1 + 2 = 4
在这种情况下,算法将输出 3 作为路数
解决方案
这类似于子集总和问题。我相信你必须使用分支和绑定方法或回溯方法。
1)创建一个包含所有可能情况的状态空间树。
0
/ | \
1 2 5
/ | \
1 2 5 ........
2)继续该过程,直到深度优先方式的节点总和大于或等于您想要的数量。
3) 数数。满足您的条件的完整分支。
可以在此处找到类似问题的 python 实现。
推荐阅读
- javascript - 单击链接时,它应该会弹出 - Blogger
- c# - 为什么我们使用 int 而不是 byte?
- python-3.x - 如何检查特定元素与索引之间的距离?Python3
- node.js - 仅在 Documents 目录中运行 create-react-app 后,npm start 无法正常工作
- string - How to make a variable that is accessible and changeable by all files in project
- java - 用于解析人类可读算术计算的日期库
- visual-studio - #region 指令在更新到 Visual Studio 16.5.1 时失去缩进
- sparql - Virtuoso:点之间的 st_intersects() 距离与精度参数不匹配
- sql - Problems inserting datetime data into a table
- java - Maven test failing - Autowire of property not working