Skip to content

Commit 29ab25a

Browse files
authored
Create 1986-minimum-number-of-work-sessions-to-finish-the-tasks.js
1 parent f1f209d commit 29ab25a

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* @param {number[]} tasks
3+
* @param {number} sessionTime
4+
* @return {number}
5+
*/
6+
const minSessions = function(tasks, sessionTime) {
7+
const n = tasks.length
8+
const dp = Array.from({ length: 1 << 14 }, () => Array(16).fill(-1))
9+
return fn(0, 0)
10+
11+
function fn(mask, consumed) {
12+
if (mask === (1 << n) - 1) {
13+
return consumed === 0 ? 0 : 1
14+
}
15+
if (dp[mask][consumed] !== -1) {
16+
return dp[mask][consumed];
17+
}
18+
19+
let result = Number.MAX_VALUE;
20+
if (consumed > 0) {
21+
result = Math.min(result, 1 + fn(mask, 0));
22+
}
23+
for (let i = 0; i < n; i++) {
24+
if ((mask & (1 << i)) === 0 && consumed + tasks[i] <= sessionTime) {
25+
result = Math.min(result, fn(mask | (1 << i), consumed + tasks[i]));
26+
}
27+
}
28+
return dp[mask][consumed] = result;
29+
}
30+
};

0 commit comments

Comments
 (0)