前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1335. Minimum Difficulty of a Job Schedule

1335. Minimum Difficulty of a Job Schedule

作者头像
ppxai
发布2023-11-18 08:29:50
1140
发布2023-11-18 08:29:50
举报
文章被收录于专栏:皮皮星球皮皮星球

1335. Minimum Difficulty of a Job Schedule

You want to schedule a list of jobs in d days. Jobs are dependent (i.e To work on the i-th 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 in that day.

Given an array of integers jobDifficulty and an integer d. The difficulty of the i-th job is jobDifficulty[i].

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

Example 1:

代码语言:javascript
复制
Input: jobDifficulty = [6,5,4,3,2,1], d = 2
Output: 7
Explanation: First day you can finish the first 5 jobs, total difficulty = 6.
Second day you can finish the last job, total difficulty = 1.
The difficulty of the schedule = 6 + 1 = 7 

Example 2:

代码语言:javascript
复制
Input: jobDifficulty = [9,9,9], d = 4
Output: -1
Explanation: If you finish a job per day you will still have a free day. you cannot find a schedule for the given jobs.

Example 3:

代码语言:javascript
复制
Input: jobDifficulty = [1,1,1], d = 3
Output: 3
Explanation: The schedule is one job per day. total difficulty will be 3.

Example 4:

代码语言:javascript
复制
Input: jobDifficulty = [7,1,7,1,7,1], d = 3
Output: 15

Example 5:

代码语言:javascript
复制
Input: jobDifficulty = [11,111,22,222,33,333,44,444], d = 6
Output: 843

Constraints:

  • 1 <= jobDifficulty.length <= 300
  • 0 <= jobDifficulty[i] <= 1000
  • 1 <= d <= 10

思路:

题目意思是给定一个数组,每个元素代表一个任务的完成时间,再给出一个天数,让分配这些任务,每天完成的任务数不限制,耗时按照最大的计算,保证所有天数加起来耗时最小。 可以从划分的角度考虑,对于j个任务,第k天完成的任务的最小值,等于前j-k天完成的最小值,加上后面任务完成所需的最大值。那状态转移方程就可以是: dp[i][k] = min(dp[j][k-1] + max(jobs[j+1, i])) (k - 1 <= j < i)。j个任务的取值范围有下界是因为任务数量一定要大于天数,不然题目是无解的。

代码:

golang:

代码语言:javascript
复制
func minDifficulty(jobs []int, d int) int {
    m := len(jobs)
    if m < d {
        return -1
    }
    
    var dp = make([][]int, m + 1)
    for i := range dp {
        dp[i] = make([]int, d + 1)
        for j := range dp[i] {
            dp[i][j] = math.MaxInt16
        }
    }
    
    dp[0][0] = 0
    for i := 1; i <= m; i++ {
        for k := 1; k <= d; k++ {
            maxDay := 0
            for j := i - 1; j >= k - 1; j-- {
                maxDay = max(maxDay, jobs[j])
                dp[i][k] = min(dp[i][k], dp[j][k-1] + maxDay)
            } 
        }
    }
    
    return dp[m][d]
    
}

func max(i, j int) int {
    if i > j {
        return i
    }
    return j
}

func min(i, j int) int {
    if i < j {
        return i
    }
    return j
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1335. Minimum Difficulty of a Job Schedule
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档