这类似于0-1背包问题或子集和问题。
如果权重不是很大的整数,则动态编程解决方案应该是有效的。
这是动态编程算法的javascript实现。如果您需要随机分组,则在应用此算法之前,只需随机洗牌。
var p = { jane:126, julia:112,...};function subset(people, min, max){ var subsets = []; subsets[0] = ''; for (var person in people) { for (var s = min-1; s >= 0; --s) { if (s in subsets) { var sum = s + people[person]; if (!(sum in subsets)) { subsets[sum] = subsets[s] + ' ' + person; if (sum >= min && sum <= max) { return subsets[sum]; } } } } } return 'Not found';}print(subset(p, 818, 822));


