kiinlam
9/19/2016 - 3:29 AM

奖金优化搏冷搏热

奖金优化搏冷搏热

// list: 单倍奖金
// bsMax: 最大倍数
// type: hot/cold

function optBest(list, bsMax, type) {
    var bsList = [], delta, total = bsMax * 2, bsAdd = 0;
    
    $.each(list, function(idx, item) {
        var minBs = Math.ceil(total / item);
        bsList.push(minBs);
        bsAdd += minBs;
    });

    delta = bsAdd - bsMax;

    if (delta > 0) {
        var prog = bsMax / bsAdd,
            realBs,
            overBs,
            i, j;

        for (i = 0, j = bsList.length; i < j; i++) {
            realBs = Math.floor(bsList[i] * prog);
            overBs = Math.min(delta, Math.max(1, bsList[i] - realBs));
            if (overBs < bsList[i]) {
                bsList[i] -= overBs;
                delta -= overBs;
            }
            if (delta <= 0) {
                break;
            }
        }

        while (delta > 0) {
            for (i = 0, j = bsList.length; i < j; i++) {
                if (bsList[i] > 1) {
                    bsList[i]--;
                    delta--;
                }
                if (delta <= 0) {
                    break;
                }
            }
        }

    } else if (delta < 0) {
        delta *= -1;
        if (type == "hot") {
            bsList[0] += delta;
        } else {
            bsList[bsList.length - 1] += delta;
        }
    }

    return bsList;
}