1
var minimumTimeRequired = function (jobs, k) {3
maskSum = [...Array(1 << n)].map((d) => 0);7
mask++ //pre-store the sums of every mask9
for (let i = 0; i < n; i++)10
maskSum[mask] += Number(((1 << i) & mask) != 0) * jobs[i];11
let dp = [...Array(k + 1)].map((d) =>12
[...Array(1 << n)].map((d) => Infinity)18
i++ //for each new person23
curmask++ //guess what his mask can be, what items can he select28
prevmask++ // but also, guess what the previous i-1 persons took already30
if ((curmask & prevmask) === 0)31
//obviously, 2 people can't take the same job32
dp[i][curmask | prevmask] = Math.min(33
dp[i][curmask | prevmask],34
Math.max(dp[i - 1][prevmask], maskSum[curmask])36
return dp[k][(1 << n) - 1];