标题:求助:在数组中挑选指定数量的数,使其合计值等于规定值
只看楼主
vbfans01
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-7-10
结帖率:0
已结贴  问题点数:10 回复次数:3 
求助:在数组中挑选指定数量的数,使其合计值等于规定值

 问题:在数组中挑选指定数量的数,使其合计值等于规定值
例如:在50,100,125,150,200,250,315,400,630这几个数中选18个(可以重复),使它们的合计等于2050。

Dim ArrData(8)
ArrData(0) = 50
ArrData(1) = 100
ArrData(2) = 125
ArrData(3) = 150
ArrData(4) = 200
ArrData(5) = 250
ArrData(6) = 315
ArrData(7) = 400
ArrData(8) = 630
2016-04-06 20:31
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:5 
组合所有的排列组合的运算次数为: 39346408075296537575424   ,39万亿亿次

你去找算法吧。如果只求一个最优结果,好像可以使用贪心算法,但我不会。呵

授人于鱼,不如授人于渔
早已停用QQ了
2016-04-07 10:25
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:735
专家分:3478
注 册:2013-1-26
得分:5 
这个问题不是最优问题.
先把问题用初等数学帮你简化一下:
两个方程解9个未知数
方程1:50a+100b+125c+150d+200e+250f+315g+400h+630i=2050
化简:10a+20b+25c+30d+40e+50f+63g+80h+126i=410
方程2:a+b+c+d+e+f+g+h+i=18
消去a有:10b+15c+20d+30e+40f+53g+70h+116i=230
自己分析,最先得到g=0,i=0
剩下10b+15c+20d+30e+40f+70h=230
2b+3c+4d+6e+8f+14h=46
这就好解了,随便试都有解。用遍历也容易
遍历时,注意每个变量的取值范围,比如e为0至46/8.

[此贴子已经被作者于2016-4-7 17:19编辑过]


大开眼界
2016-04-07 11:12
vbfans01
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-7-10
得分:0 
大神们能不能给一个所有的排列组合的代码。
不需要优化,也不需要管时间消耗。
2016-04-07 22:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-463339-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.470670 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved