Minimum Difficulty of a Job Schedule

HardArrayDynamic Programming

Solution

export function minDifficulty(jobDifficulty: number[], d: number): number {
  const n = jobDifficulty.length;
  if (n < d) {
    return -1;
  }
 
  const dp = new Array(n + 1).fill(Number.MAX_SAFE_INTEGER);
  dp[n] = 0;
  for (let day = 1; day <= d; day++) {
    for (let i = 0; i <= n - day; i++) {
      let maxDifficulty = 0;
      dp[i] = Number.MAX_SAFE_INTEGER;
      for (let j = i; j <= n - day; j++) {
        maxDifficulty = Math.max(maxDifficulty, jobDifficulty[j]);
        dp[i] = Math.min(dp[i], maxDifficulty + dp[j + 1]);
      }
    }
  }
  return dp[0];
}