1335 工作计划的最低难度(动态规划)
发布日期:2021-05-07 21:56:23 浏览次数:23 分类:精选文章

本文共 1397 字,大约阅读时间需要 4 分钟。

为了解决这个问题,我们需要制定一个d天的工作计划,每天至少完成一项任务,并且工作之间存在依赖关系。我们的目标是找到整个计划的最小总难度,如果无法完成任务则返回-1。

方法思路

我们可以使用动态规划来解决这个问题。定义一个二维数组dp,其中dp[i][j]表示在第i天完成j项工作的最小总难度。我们需要填充这个二维数组,找到最优的工作安排方式。

  • 初始化:dp[1][1]表示第一天完成第一项任务的难度。
  • 填充第一天:第一天完成1到n项任务的难度,取每一天的最大任务难度。
  • 动态规划递推:对于每一天i,考虑前一天完成k项工作的情况,计算当前天完成j - k项工作的最小总难度。逆序遍历k,确保考虑所有可能的前一天任务数。
  • 结果检查:如果dp[d][n]未被赋值,说明无法完成任务,返回-1。
  • 解决代码

    from typing import List
    class Solution:
    def minDifficulty(self, jobDifficulty: List[int], d: int) -> int:
    n = len(jobDifficulty)
    if n < d:
    return -1
    dp = [[-1] * (n + 1) for _ in range(d + 1)]
    dp[1][1] = jobDifficulty[0]
    for i in range(2, n + 1):
    dp[1][i] = max(dp[1][i - 1], jobDifficulty[i - 1])
    for i in range(2, d + 1):
    for j in range(i, n + 1):
    dp[i][j] = dp[i - 1][j - 1] + jobDifficulty[j - 1]
    for k in range(j - 2, i - 2, -1):
    current_max = max(jobDifficulty[k], jobDifficulty[j - 1])
    if dp[i - 1][k] + current_max < dp[i][j]:
    dp[i][j] = dp[i - 1][k] + current_max
    return dp[d][n] if dp[d][n] != -1 else -1

    代码解释

  • 初始化:检查任务数是否超过天数,初始化dp数组,dp[1][1]设为第一项任务的难度。
  • 填充第一天:计算第一天完成1到n项任务的最大难度。
  • 动态规划递推:对于每一天i,计算每一天完成j项任务的最小总难度,考虑前一天完成k项任务的情况,逆序遍历k以确保所有可能情况被考虑。
  • 结果检查:返回dp[d][n],如果未被赋值则返回-1。
  • 通过这种方法,我们可以高效地找到完成任务的最小总难度,确保每天至少完成一项任务并满足依赖关系。

    上一篇:python标准库--heapq堆队列算法
    下一篇:1009 十进制整数的反码(模拟)

    发表评论

    最新留言

    路过按个爪印,很不错,赞一个!
    [***.219.124.196]2025年04月26日 08时41分31秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章

    ELK原理与介绍(转) 2025-03-29
    ELK学习笔记(三)单台服务器多节点部署 2025-03-29
    ELK应用日志收集实战 2025-03-29
    elTable火狐浏览器换行 2025-03-29
    15个Python数据处理技巧(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
    2023年深信服、奇安信、360等大厂网络安全校招面试真题合集(附答案),让你面试轻松无压力! 2025-03-29
    2024年全国程序员平均薪资排名:同样是程序员,为什么差这么多?零基础到精通,收藏这篇就够了 2025-03-29
    0基础成功转行网络安全工程师,年薪30W+,经验总结都在这(建议收藏) 2025-03-29
    100个电脑常用组合键大全(非常详细)零基础入门到精通,收藏这篇就够了 2025-03-29
    10个程序员可以接私活的平台 2025-03-29
    10个程序员可以接私活的平台(非常详细)零基础入门到精通,收藏这篇就够了 2025-03-29
    10个运维拿来就用的 Shell 脚本,用了才知道有多爽,零基础入门到精通,收藏这一篇就够了 2025-03-29
    10条sql语句优化的建议 2025-03-29
    10款宝藏编程工具!新手必备,大牛强烈推荐! 从零基础到精通,收藏这篇就够了! 2025-03-29
    10款最佳免费WiFi黑客工具(附传送门)零基础入门到精通,收藏这一篇就够了 2025-03-29
    15个Python数据分析实用技巧(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
    15个备受欢迎的嵌入式GUI库,从零基础到精通,收藏这篇就够了! 2025-03-29
    15个程序员常逛的宝藏网站!!从零基础到精通,收藏这篇就够了! 2025-03-29
    1分钟学会在Linux下模拟网络延迟 2025-03-29
    200款免费的AI工具汇总 2025-03-29