数值分组问题,组数最多,剩余最大?!

有一组数,数字大小和个数不固定。比如:
12,15,16,15,9,15,29,35,19,49,25,25
要求:
每组数字和必须大于等于68
分尽可能多的组
分组剩余的数字和尽可能的大

用什么样的算法呢,若有代码就更好了,谢谢!!

背包算法的变形,因为你算的是最小和而不是最大和
http://blog.csdn.net/lan_liang/article/details/41313117

我要能分尽可能多的包,并且最后剩余的最大,背包算法只有一个包

////背包算法练习--求大于某数字的数组最小和:

var bestS = {
val: 10000,
str: ""
};
var LIMIT;

Array.prototype.sum = function() {
var s = 0;
for (var i = 0; i < this.length; i++) {
s += this[i];
}
return s;
}

function f(bagArr) {
var arrS = bagArr.sum();
if (arrS > LIMIT) {
bestS = arrS < bestS.val ? {
val: arrS,
str: bagArr.join(',')
}: bestS;
/// return;
}

for (var i = 0; i < bagArr.length; i++) {

    var copyArr = new Array();
    for (var j = 0; j < bagArr.length; j++) {
        copyArr.push(bagArr[j]);
    }
    copyArr.splice(i, 1);

    f(copyArr);

}

}

LIMIT = 197;
f(new Array(49, 28, 119, 50, 78, 48, 29, 49, 52));
console.log(bestS);


 ////背包算法练习--求大于某数字的数组最小和:  
var bestS = {
    val: 10000,
    str: ""
};
var LIMIT;


Array.prototype.sum = function() {
    var s = 0;
    for (var i = 0; i < this.length; i++) {
        s += this[i];
    }
    return s;
}

function f(bagArr) {
    var arrS = bagArr.sum();
    if (arrS > LIMIT) {
        bestS = arrS < bestS.val ? {
            val: arrS,
            str: bagArr.join(',')
        }: bestS;
///        return;
    }

    for (var i = 0; i < bagArr.length; i++) {

        var copyArr = new Array();
        for (var j = 0; j < bagArr.length; j++) {
            copyArr.push(bagArr[j]);
        }
        copyArr.splice(i, 1);

        f(copyArr);

    }

}

LIMIT = 197;
f(new Array(49, 28, 119, 50, 78, 48, 29, 49, 52));
console.log(bestS);

这样的话,执行时间也太长了,数字稍微大点,就要运行几分钟,可以优化不??

当数据增加一倍,就好像死了一样,几分钟都不好,你的算法不太好!

我是不是悬赏少了???

求高手
求高手
求高手
求高手
求高手
求高手
求高手
求高手
求高手
求高手
求高手
求高手