JSFiddle - React, Tailwind, and code Playground
by wittwerj
JavaScript
var test = function () {
var players = 60;
var salarycap = 100000;
var salaries = [21500, 18250, 18000, 17750, 17500, 17250, 17000, 16750, 16500, 16250, 16000, 15750, 15500, 15250, 15000, 14750, 14500, 14250, 14000, 13750, 13500, 13250, 13000, 12750, 12500, 12250, 12000, 11750, 11500, 11250, 11000, 10750, 10500, 10250, 10000, 9750, 9500, 9250, 9000, 8750, 8500, 8250, 8000, 7750, 7500, 7250, 7000, 6750, 6500, 6250, 6000, 5750, 5500, 5250, 5000, 4750, 4500, 4250, 4000, 3750];
var projections = [29, 23, 20, 17, 19, 17, 15, 20, 19, 18, 17, 16, 15, 14, 25, 22, 19, 16, 19, 18, 17, 16, 15, 14, 13, 12, 10, 9, 8, 17, 15, 13, 11, 12, 11, 10, 9, 8, 7, 6, 5, 9, 8, 7, 6, 10, 9, 8, 7, 6, 5, 8, 8, 8, 7, 7, 5, 5, 8, 2];
var picks = knapsack(players, salarycap, salaries, projections);
printPicks(picks, players, salarycap, salaries, projections)
}();
function knapsack(n, size, weights, values) {
var matrix = new Array();
var picks = new Array();
for (var i = 0; i <= n; i++) {
matrix.push(new Array());
picks.push(new Array());
//initialize to 0
for (var j = 0; j <= size; j++) {
matrix[i][j] = 0;
picks[i][j] = 0;
}
}
for (var i = 1; i <= n; i++) {
for (var j = 0; j <= size; j++) {
if (weights[i - 1] <= j) {
var excluded = matrix[i - 1][j];
var included = values[i - 1] + matrix[i - 1][j - weights[i - 1]];
if (included > excluded) {
picks[i][j] = 1;
matrix[i][j] = included;
} else {
picks[i][j] = -1;
matrix[i][j] = excluded;
}
} else {
matrix[i][j] = matrix[i - 1][j];
picks[i][j] = -1;
}
}
}
return picks;
}
function printPicks(picks, n, size, weights, values) {
console.log('items chosen: ');
while (n > 0) {
...