首页 > 其他分享 >1335. 工作计划的最低难度

1335. 工作计划的最低难度

时间:2023-05-16 11:16:13浏览次数:64  
标签:1335 max Math 最低 int 难度 jobDifficulty dp regionMax

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

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

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

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

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

动态规划


import java.util.Arrays;

class Solution {

    public int minDifficulty(int[] jobDifficulty, int d) {
        int n = jobDifficulty.length;
        if (d > n) {
            return -1;
        }
        int[][] dp = new int[n][d];
        int INF = Integer.MAX_VALUE - 1000;
        dp[0][0] = jobDifficulty[0];
        int max = jobDifficulty[0];
        for (int i = 1; i < n; i++) {
            max = Math.max(max, jobDifficulty[i]);
            dp[i][0] = max;
            for (int j = 1; j <= Math.min(d - 1, i); j++) {
                int regionMax = 0;
                dp[i][j] = INF;
                for (int k = i; k >= j; k--) {
                    regionMax = Math.max(regionMax, jobDifficulty[k]);
                    dp[i][j] = Math.min(dp[i][j], dp[k - 1][j - 1] + regionMax);
                }
            }
        }
        return dp[n - 1][d - 1];
    }

    public int minDifficulty(int[] jobDifficulty, int d) {
        int n = jobDifficulty.length;
        if (n < d) {
            return -1;
        }
        int INF = Integer.MAX_VALUE - 1000;
        int[][] dp = new int[d][n];
        for (int i = 0; i < d; ++i) {
            Arrays.fill(dp[i], INF);
        }
        int max = 0;
        for (int i = 0; i < n; ++i) {
            max = Math.max(max, jobDifficulty[i]);
            dp[0][i] = max;
        }
        for (int i = 1; i < d; ++i) {
            for (int j = i; j < n; ++j) {
                int regionMax = 0;
                for (int k = j; k >= i; --k) {
                    regionMax = Math.max(regionMax, jobDifficulty[k]);
                    dp[i][j] = Math.min(dp[i][j], regionMax + dp[i - 1][k - 1]);
                }
            }
        }
        return dp[d - 1][n - 1];
    }

    public int minDifficulty(int[] jobDifficulty, int d) {
        int n = jobDifficulty.length;
        if (n < d) {
            return -1;
        }
        int INF = Integer.MAX_VALUE - 1000;
        int[] dp = new int[n];
        Arrays.fill(dp, INF);
        int max = 0;
        for (int i = 0; i < n; ++i) {
            max = Math.max(max, jobDifficulty[i]);
            dp[i] = max;
        }
        for (int i = 1; i < d; ++i) {
            int[] helper = new int[n];
            for (int j = i; j < n; ++j) {
                int regionMax = 0;
                helper[j] = INF;
                for (int k = j; k >= i; --k) {
                    regionMax = Math.max(regionMax, jobDifficulty[k]);
                    helper[j] = Math.min(helper[j], regionMax + dp[k - 1]);
                }
            }
            System.arraycopy(helper, 0, dp, 0, n);
        }
        return dp[n - 1];
    }
}

单调栈


标签:1335,max,Math,最低,int,难度,jobDifficulty,dp,regionMax
From: https://www.cnblogs.com/tianyiya/p/17404316.html

相关文章

  • 接MATLAB各类问题,难度不限。 编程,画图,定制,调试,debug等。 依据
    接MATLAB各类问题,难度不限。编程,画图,定制,调试,debug等。依据任务难度报价,详细请加好友。ID:521681885430880......
  • 团队绩效最低不被淘汰博客
    本人所在团队为“蛋仔派对”,第27组。本人在团队绩效考核中分数最低,因此撰写本博客阐述自己不被团队淘汰的理由。1.在集体进行编程期间,本人都是与另一组员一起进行学习(我们组只有两名成员),在自习室通过聊天交流想法,起到了互相监督的作用。2.每天清晨按时按点参加团队每日会议,并......
  • 最低不被淘汰
    1.在团队博客制作过程中我辅助页面的设计,我花费了大量时间上网查了许多东西,对团队项目的制作有贡献。2.我们团队3人属于都比较菜的,所以在制作过程中需要花费更多时间。3.我个人也因为水平较低原因单独很难完成。......
  • 考核最低自我评价
     在我们29组中我的贡献时最低的,原本在我们的计划中我们是准备了安卓端和手机端的人脸专注度检测的,我们组四个人,俩pc俩安卓,我负责完成安卓端的界面设计,我完成了安卓端的界面,但数据的连接和接口的调用感觉太难一直弄不好所以室友放弃了,最后两天我们就一起完成pc端了。评价:1,完成......
  • 考核成绩最低的原因和我在队伍中的贡献以及今后如何改正和不被淘汰的原因。
    因为自己是团队贡献值最低的成员,为了不被团队t出去和期末考核过关,通过此次博客来规划期末前要达到的目标。今后如何改正:熟练掌握数据库增删改查,能够自主完成考题等基本需求,能够完成对产品需求的实际应用分析,并能够在考核中实现对应功能。在此后的学习中,多花时间学习相关代码技能......
  • 绩效最低的团队成员自我评价
    第一阶段大部分都是他俩主写的,他们负责达梦数据库的连接,负责管理系统和用户系统的编写,我只是负责一些页面的编写,所以我就是那个干活最少的,自然而然我来写这篇博客。我第一阶段总结来说就是没干什么活。下阶段目标:我觉得他们那个用户管理系统写的不太出彩,我打算自己重做管理系统......
  • 笔记本centos7系统屏幕默认最低亮度,无法调亮
    原因是显卡驱动和系统内核不兼容导致。解决方法:方法1更新显卡驱动或者方法2升级内核:1rpm--importhttps://www.elrepo.org/RPM-GPG-KEY-elrepo.org2rpm-Uvhhttp://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm3sudoyum--enablerepo=elrepo-kerneli......
  • 用最低成本实现高性能写入、查询、存储,揭秘 TDengine 技术实现逻辑
    从《写入性能:TDengine最高达到InfluxDB的10.3倍,TimeScaleDB的6.74倍》、《查询性能:TDengine最高达到了InfluxDB的37倍、TimescaleDB的28.6倍》两篇文章中,我们发现,TDengine(TimeSeriesDatabase)不仅在写入和查询性能上超越了InfluxDB和TimescaleDB,在数据处理过......
  • 这题初3难度天花板了吧
    昨天在数学吧还看到一题  《这题初3难度天花板了吧》   https://tieba.baidu.com/p/8392054740   。 我一开始在2楼就看到层主说 “三角换元”,  我想了一下, 有道理,  又往下看了一些回复,  看到有人说  “数形结合”,  我一想......
  • 06 BTC-挖矿难度
    《区块链技术与应用》课程链接:https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click06BTC-挖矿难度目录06BTC-挖矿难度调整目标空间占输出空间的比例,来调整计算难度值。difficulty_1_target:难度目标为1时候的目标阈值,是一个很大的值......