1. 题目

你需要制定一份 d 天的工作计划表。工作之间存在依赖,要想执行第 i 项工作,你必须完成全部 j 项工作( 0 <= j < i)。

你每天 至少 需要完成一项任务。工作计划的总难度是这 d 天每一天的难度之和,而一天的工作难度是当天应该完成工作的最大难度

给你一个整数数组 jobDifficulty 和一个整数 d,分别代表工作难度和需要计划的天数。第 i 项工作的难度是 jobDifficulty[i]。

返回整个工作计划的 最小难度 。如果无法制定工作计划,则返回 -1 。

示例 1:
输入:jobDifficulty = [6,5,4,3,2,1], d = 2
输出:7
解释:第一天,您可以完成前 5 项工作,总难度 = 6.
第二天,您可以完成最后一项工作,总难度 = 1.
计划表的难度 = 6 + 1 = 7

示例 2:
输入:jobDifficulty = [9,9,9], d = 4
输出:-1
解释:就算你每天完成一项工作,仍然有一天是空闲的,
你无法制定一份能够满足既定工作时间的计划表。示例 3:
输入:jobDifficulty = [1,1,1], d = 3
输出:3
解释:工作计划为每天一项工作,总难度为 3 。示例 4:
输入:jobDifficulty = [7,1,7,1,7,1], d = 3
输出:15示例 5:
输入:jobDifficulty = [11,111,22,222,33,333,44,444], d = 6
输出:843提示:
1 <= jobDifficulty.length <= 300
0 <= jobDifficulty[i] <= 1000
1 <= d <= 10

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-difficulty-of-a-job-schedule
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. DP解题

class Solution {public:int minDifficulty(vector<int>& jobDifficulty, int d) {int n = jobDifficulty.size(), i, j, k, MAX = 0;if(n < d)return -1;vector<vector<int>> dp(d,vector<int>(n, INT_MAX));for(i = 0; i <= n-d; ++i){MAX = max(MAX, jobDifficulty[i]);dp[0][i] = MAX;//初始化第一天的工作难度的几种可能}for(i = 1; i < d; ++i)//填表,剩余的几天{  //每次前一天至少完成一项工作,还要保证后面几天至少每天有1项工作要做for(j = i; j <= n-d+i; ++j){  MAX = 0;for(k = j; k <= n-d+i; ++k){   //对前一天和当前天的所有组合取min难度MAX = max(MAX, jobDifficulty[k]);dp[i][k] = min(dp[i][k], MAX+dp[i-1][j-1]);}}}return dp[d-1][n-1];}
};
示例 5:
输入:jobDifficulty = [11,111,22,222,33,333,44,444], d = 6
输出:843

填写dp状态表过程:

11 111 22 222 33 333 44 444
11 111 111
122 122、133 233、333、333
144 344、344 344、344、266
366 366、377 477、677、599
399 699、699 699、699、521
732 732、743 843、1143、965

倒推回去,应该这么分成6天: 11 | 111 | 22 | 222 | 33 | 333、44、444
总的难度最小:‭11 + 111 + 22 + 222 + 33 + 444 =‬ 843

LeetCode 1335. 工作计划的最低难度(DP)相关推荐

  1. [leetcode] 1335. 工作计划的最低难度

    class Solution {public:int minDifficulty(vector<int>& jobDifficulty, int d) {int n = jobDi ...

  2. 1335 工作计划的最低难度(动态规划)

    1. 问题描述: 你需要制定一份 d 天的工作计划表.工作之间存在依赖,要想执行第 i 项工作,你必须完成全部 j 项工作( 0 <= j < i).你每天至少需要完成一项任务.工作计划的 ...

  3. LeetCode第172场周赛:5322. 工作计划的最低难度(动态规划)

    你需要制定一份 d 天的工作计划表.工作之间存在依赖,要想执行第 i 项工作,你必须完成全部 j 项工作( 0 <= j < i). 你每天 至少 需要完成一项任务.工作计划的总难度是这  ...

  4. 【区间 dp】A005_LC_工作计划的最低难度(暴搜 / dp)

    一.Problem You want to schedule a list of jobs in d days. Jobs are dependent (i.e To work on the i-th ...

  5. 计算机知识幼儿园,幼儿园中班计算机教学工作计划

    幼儿园中班计算机教学工作计划 第一学期已经开始,根据英语幼儿园的工作计划,结合往年的教学实践,对本学期中班计算机教学计划如下: 严格要求: 老师在整个教学过程中扮演十分重要的角色,特别是幼儿园就更加如 ...

  6. 八年级下册册计算机计划,粤教版(B版)信息技术八年级下册教学工作计划

    ==================资料简介====================== 八年级信息技术下册教学工作计划 指导思想 计算机作为信息时代的主要载体和工具,在教育中担负起越来越重要的作用. ...

  7. 七年级计算机室使用计划表,七年级信息技术教学工作计划

    时间眨眼而过,又是一年工作计划的时刻啦!下面是出国留学网小编为大家整理的"七年级信息技术教学工作计划",欢迎参阅.内容仅供参考,了解更多关于工作计划内容,请关注出国留学工作计划栏目 ...

  8. (附源码)springboot工作计划管理软件 毕业设计 181638

    工作计划管理软件的设计与实现 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发步骤 ...

  9. (附源码)spring boot工作计划管理软件 毕业设计181638

    工作计划管理软件的设计与实现 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发步骤 ...

最新文章

  1. 5G 标准 — 3GPP
  2. JavaScript算法(实例五)最大公约数和最小公倍数 / n的倍数之和 / 组合数
  3. CCF201409试题
  4. 开课吧课堂:C++开发语言的应用方向有哪些?
  5. mapreduce 多种输入
  6. (转)常见的用户密码加密方式以及破解方法
  7. JAVA开发一个合并单元格报表_9、docx4j实现动态表格(编程式)单元格合并
  8. 遗传算法详解python代码实现以及实例分析
  9. DDR等布线/走线需要等长的原因
  10. 数据库表数据怎么恢复数据_恢复糟透了。 这是数据。
  11. php mysql 表情录入_php + mysql 存入表情 【如何转义emoji表情,让它可以存入utf8的数据库】...
  12. TTL 传输中过期,内部网络环路
  13. css文字不透明度怎么设置?
  14. PTA 天梯赛的善良(20分)[C语言]
  15. url去重的几种方式
  16. 你怀疑过 温水煮青蛙 的故事吗
  17. 圆周率java程序_Java小程序计算圆周率代码
  18. iOS开发之iAd苹果广告
  19. IIS安装和使用URL重写工具-URL Rewrite
  20. 如何清理电脑浏览器缓存,4款常用浏览器清理缓存的方法

热门文章

  1. python文件夹目录_Python 操作文件、文件夹、目录大全
  2. python leetcode_leetcode 介绍和 python 数据结构与算法学习资料
  3. 【Go 并发控制】上下文 context 源码
  4. manjaro linux 教程,Manjaro 使用基础
  5. Linux 压缩和解压命令
  6. url编码函数encodeURI和encodeURIComponent
  7. python不用加号实现加法
  8. 数据结构_二叉树遍历
  9. VBA之六--EXCEL VBA两则
  10. Hadoop之Shell命令