ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 香川群子

[原创] 2014新年元旦第一强帖:实用凑数凑金额高效递归剪枝算法

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2020-10-22 14:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:递归
这段代码,,,,,,,,,什么意思啊
QQ图片20201022141422.png

TA的精华主题

TA的得分主题

发表于 2020-11-25 15:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
留个记号下次来找

TA的精华主题

TA的得分主题

发表于 2020-12-3 22:16 | 显示全部楼层
香川群子 发表于 2014-1-3 10:20
其实也只是稍微慢了一点,比起普通二进制组合算法,仍然是火车和牛车的差别。

最最关键是,适当的参数 ...

老师,请问你的这个代码如何双列双目标值凑数?

凑数求和20201203.zip

29.28 KB, 下载次数: 19

双列凑数

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-7 15:42 | 显示全部楼层
chengw823 发表于 2020-12-3 22:16
老师,请问你的这个代码如何双列双目标值凑数?

没明白你的目标结果,以及限制条件。

请举例说明。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-12-7 19:50 | 显示全部楼层
虽然有点难,但还是要学习一下。

TA的精华主题

TA的得分主题

发表于 2020-12-8 13:05 来自手机 | 显示全部楼层
香川群子 发表于 2020-12-7 15:42
没明白你的目标结果,以及限制条件。

请举例说明。

老师,大概的意思是,b列数据1凑数等于目标和1,c列数据2凑数等于目标和值2,这两组凑数必须都是对应同一行的所有数据之和,并在D列标记取了那几行的数,我昨天改你的代码,运行了一小时都没凑出来,实在太难了
123.JPG

TA的精华主题

TA的得分主题

发表于 2020-12-8 14:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

感谢楼主的分享!

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-12 21:02 | 显示全部楼层
本帖最后由 香川群子 于 2020-12-12 21:03 编辑
chengw823 发表于 2020-12-8 13:05
老师,大概的意思是,b列数据1凑数等于目标和1,c列数据2凑数等于目标和值2,这两组凑数必须都是对应同一 ...

B列很多数据都是500。

我把大部分500去掉,相应的减少目标数值,测试结果,最大组合数=50,此时目标值=3104

也就是说,目标值=13604可以转化为=10500+3104,其中10500是由21*500得到,而3104可以有50种组合。

那么结果就是,这50种组合各自对应的C列数据,再加上从356个500中选择21个进行组合的C列结果,两者之和。

…………
下面是第一步,50种组合:
+500+500+500+500+500+327+277
+500+500+500+500+327+308+254+215
+500+500+500+500+327+270+255+252
+500+500+500+500+308+240+210+178+168
+500+500+500+500+277+254+215+190+168
+500+500+500+500+254+252+240+190+168
+500+500+500+327+308+277+277+225+190
+500+500+500+327+308+277+270+254+168
+500+500+500+327+308+277+252+225+215
+500+500+500+327+308+270+255+254+190
+500+500+500+327+277+254+210+190+178+168
+500+500+500+327+254+252+215+210+178+168
+500+500+500+327+254+240+215+210+190+168
+500+500+500+308+277+270+255+254+240
+500+500+500+308+270+255+215+210+178+168
+500+500+500+308+270+240+225+215+178+168
+500+500+500+277+277+254+240+210+178+168
+500+500+500+277+277+252+225+215+190+168
+500+500+500+277+270+254+225+210+190+178
+500+500+500+277+255+254+240+210+190+178
+500+500+500+277+255+254+225+215+210+168
+500+500+500+270+255+254+252+215+190+168
+500+500+500+270+254+252+225+215+210+178
+500+500+500+270+254+240+225+215+210+190
+500+500+500+255+254+252+240+225+210+168
+500+500+500+255+254+252+240+215+210+178
+500+500+327+308+277+277+270+252+225+168
+500+500+327+308+277+277+270+252+215+178
+500+500+327+308+277+277+270+240+215+190
+500+500+327+308+277+277+255+252+240+168
+500+500+327+308+277+270+255+252+225+190
+500+500+327+277+277+252+225+210+190+178+168
+500+500+327+277+270+254+225+215+190+178+168
+500+500+327+277+255+254+240+215+190+178+168
+500+500+327+277+252+240+225+215+210+190+168
+500+500+327+270+255+254+252+210+190+178+168
+500+500+327+270+254+252+240+225+190+178+168
+500+500+308+277+277+270+255+252+240+225
+500+500+277+277+270+255+254+215+210+178+168
+500+500+277+277+270+254+240+225+215+178+168
+500+500+277+277+255+252+240+225+210+190+178
+500+500+277+270+255+254+252+240+210+178+168
+500+500+277+270+255+254+240+225+215+190+178
+500+327+308+277+277+270+255+240+225+215+210
+500+327+308+277+254+252+225+215+210+190+178+168
+500+327+277+277+270+252+240+215+210+190+178+168
+500+327+277+277+255+252+240+225+215+190+178+168
+500+308+277+277+254+252+240+225+215+210+178+168
+500+308+277+255+254+252+240+225+215+210+190+178
+308+277+277+270+255+254+252+240+225+210+190+178+168

TA的精华主题

TA的得分主题

发表于 2020-12-12 23:05 | 显示全部楼层
chengw823 发表于 2020-12-8 13:05
老师,大概的意思是,b列数据1凑数等于目标和1,c列数据2凑数等于目标和值2,这两组凑数必须都是对应同一 ...

你这题我把它分四步完成,详见动态图
001.gif
002.gif
003.gif
004.gif

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-13 20:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 香川群子 于 2020-12-13 20:16 编辑

13604=21*500+308+277+277+270+255+254+252+240+225+210+190+178+168

71910.99=2792.23+2323.84+2249.27+2249.26+2179.77+2128.92+2067.9+2067.9+2067.9+2067.9+2067.9+2067.9+2067.9+1765.06+1734.09+1686.52+1352.41+1215.42+1107.32+955.65+889.2+4621.7+3562.32+3267.4+2997.89+2844.21+2249.27+2067.9+2067.9+2067.9+1765.06+1765.06+1765.06+1765.06

计算找到最后一种组合的一组有效解。

下面2组也是解,是21个500对应的C列数值之和=39104.26
+2844.21+2792.23+2323.84+2249.27+2249.26+2179.77+2128.92+2067.9+2067.9+2067.9+2067.9+2067.9+1973.53+1941.11+1431.49+1352.41+1349.05+1215.42+934.33+910.72+889.2

+2844.21+2792.23+2323.84+2249.27+2249.26+2179.77+2128.92+2067.9+2067.9+2067.9+2067.9+2067.9+1941.11+1734.09+1431.49+1352.41+1349.05+1215.42+1107.32+955.65+910.72

…………
总之,合格的解应该还有很多。

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 12:15 , Processed in 0.044553 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表