Back to all solutions

#1335 - Minimum Difficulty of a Job Schedule

Problem Description

You want to schedule a list of jobs in d days. Jobs are dependent (i.e To work on the ith job, you have to finish all the jobs j where 0 <= j < i).

You have to finish at least one task every day. The difficulty of a job schedule is the sum of difficulties of each day of the d days. The difficulty of a day is the maximum difficulty of a job done on that day.

You are given an integer array jobDifficulty and an integer d. The difficulty of the ith job is jobDifficulty[i].

Return the minimum difficulty of a job schedule. If you cannot find a schedule for the jobs return -1.

Solution

/**
 * @param {number[]} jobDifficulty
 * @param {number} d
 * @return {number}
 */
var minDifficulty = function(jobDifficulty, d) {
  const n = jobDifficulty.length;
  if (n < d) return -1;

  const dp = new Array(d + 1).fill().map(() => new Array(n + 1).fill(Infinity));
  dp[0][0] = 0;

  for (let days = 1; days <= d; days++) {
    for (let i = days; i <= n; i++) {
      let maxDifficulty = 0;
      for (let j = i - 1; j >= days - 1; j--) {
        maxDifficulty = Math.max(maxDifficulty, jobDifficulty[j]);
        dp[days][i] = Math.min(dp[days][i], dp[days - 1][j] + maxDifficulty);
      }
    }
  }

  return dp[d][n] === Infinity ? -1 : dp[d][n];
};