国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【每日一題Day208】LC1335工作計劃的最低難度 | 動態(tài)規(guī)劃

這篇具有很好參考價值的文章主要介紹了【每日一題Day208】LC1335工作計劃的最低難度 | 動態(tài)規(guī)劃。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

工作計劃的最低難度【LC1335】

你需要制定一份 d 天的工作計劃表。工作之間存在依賴,要想執(zhí)行第 i 項工作,你必須完成全部 j 項工作( 0 <= j < i)。

你每天 至少 需要完成一項任務(wù)。工作計劃的總難度是這 d 天每一天的難度之和,而一天的工作難度是當(dāng)天應(yīng)該完成工作的最大難度。

給你一個整數(shù)數(shù)組 jobDifficulty 和一個整數(shù) d,分別代表工作難度和需要計劃的天數(shù)。第 i 項工作的難度是 jobDifficulty[i]

返回整個工作計劃的 最小難度 。如果無法制定工作計劃,則返回 -1

我和動態(tài)規(guī)劃的關(guān)系就像是見過但是總是隱隱約約想不起來的陌生人
類似題目

dfs+記憶化
  • 思路

    題意可以轉(zhuǎn)化為分割成d個子數(shù)組,使d個子數(shù)組的最大值之和最小。

    • 尋找子問題:如果將后 [ k , n ? 1 ] [k,n-1] [k,n?1]個任務(wù)在一天內(nèi)完成,那么前面 [ 0 , k ? 1 ] [0,k-1] [0,k?1]個任務(wù)需要在 d ? 1 d-1 d?1天完成,因此找到了子問題,可以通過遞歸/動態(tài)規(guī)劃來解決。(dfs+記憶化的形式最好理解)

    • 定義dfs函數(shù):定義 d f s ( i , j ) dfs(i,j) dfs(i,j)為在 i i i天完成 [ 0 , j ] [0,j] [0,j]個任務(wù)所需要的最小難度

    • 遞歸入口:那么 d f s ( n ? 1 , d ) dfs(n-1,d) dfs(n?1,d)即為答案

    • 遞歸邏輯

      由于每一天都需要有工作任務(wù),那么在決定第 i i i天的工作任務(wù)時,必須預(yù)留 i ? 1 i-1 i?1個工作。因此在安排第 i i i天的工作任務(wù)時,我們枚舉 [ i ? 1 , j ] [i-1,j] [i?1,j]個任務(wù),分割子數(shù)組,記錄子數(shù)組中的最大值(當(dāng)天的工作難度),然后遞歸到下一天,取最小值返回。
      d f s ( i , j ) = m i n k = i ? 1 j { d f s ( i ? 1 , k ? 1 ) + m a x p = k j ( j o b D i f f i c u l t y [ p ] ) } dfs(i,j)= min_{k= i-1}^{j}\{dfs(i-1,k-1)+max_{p=k}^{j}(jobDifficulty[p])\} dfs(i,j)=mink=i?1j?{dfs(i?1,k?1)+maxp=kj?(jobDifficulty[p])}

    • 遞歸邊界

      只有一天時,必須完成所有任務(wù)

  • 實現(xiàn)

    (i可以整體縮小1)

    class Solution {
        int[] jobDifficulty;
        int[][] memo;
        int res = Integer.MAX_VALUE;
        public int minDifficulty(int[] jobDifficulty, int d) {
            this.jobDifficulty = jobDifficulty;
            // 分割成d個子數(shù)組,使d個子數(shù)組的最大值之和最小
            // dfs(i,j) j天完成[0,i]項工作所需要的最小難度
            int n = jobDifficulty.length;
            if (n < d){
                return -1;
            }
            memo = new int[d + 1][n];
            for (int i = 0; i <= d; i++){
                Arrays.fill(memo[i], -1);
            }
            return dfs(d, n - 1);
            
        }
        public int dfs(int i, int j){
            // if (i < 0 || j <= 0) return 0;
            if (memo[i][j] != -1) return memo[i][j];
            // 只有一天
            if (i == 1){
                int mx = 0;
                for (int k = 0; k <= j; k++){
                    mx = Math.max(mx, jobDifficulty[k]);
                }
                memo[i][j] = mx;
                return mx;
            }
            int res = Integer.MAX_VALUE;
            int mx = -1;
            // 枚舉子數(shù)組范圍 [i - 1, j] 留下i - 1個元素
            for (int k = j; k >= i - 1; k--){
                mx = Math.max(mx, jobDifficulty[k]);
                res = Math.min(res, mx + dfs(i - 1,k - 1));
            }
            memo[i][j] = res;
            return res;
        }
    }
    
    • 復(fù)雜度

      • 時間復(fù)雜度: O ( n 2 d ) O(n^2d) O(n2d)
      • 空間復(fù)雜度: O ( n d ) O(nd) O(nd)
遞推
  • 實現(xiàn)

    class Solution {
        public int minDifficulty(int[] a, int d) {
            int n = a.length;
            if (n < d) return -1;
    
            var f = new int[d][n];
            f[0][0] = a[0];
            for (int i = 1; i < n; i++)
                f[0][i] = Math.max(f[0][i - 1], a[i]);
            for (int i = 1; i < d; i++) {
                for (int j = n - 1; j >= i; j--) {
                    f[i][j] = Integer.MAX_VALUE;
                    int mx = 0;
                    for (int k = j; k >= i; k--) {
                        mx = Math.max(mx, a[k]); // 從 a[k] 到 a[j] 的最大值
                        f[i][j] = Math.min(f[i][j], f[i - 1][k - 1] + mx);
                    }
                }
            }
            return f[d - 1][n - 1];
        }
    }
    
    作者:靈茶山艾府
    鏈接:https://leetcode.cn/problems/minimum-difficulty-of-a-job-schedule/solutions/2271631/jiao-ni-yi-bu-bu-si-kao-dong-tai-gui-hua-68nx/
    來源:力扣(LeetCode)
    著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
    
    • 復(fù)雜度文章來源地址http://www.zghlxwxcb.cn/news/detail-447505.html

      • 時間復(fù)雜度: O ( n 2 d ) O(n^2d) O(n2d)
      • 空間復(fù)雜度: O ( n d ) O(nd) O(nd)

到了這里,關(guān)于【每日一題Day208】LC1335工作計劃的最低難度 | 動態(tài)規(guī)劃的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【每日一題Day281】LC142鏈表 Ⅱ| 快慢指針 哈希表

    【每日一題Day281】LC142鏈表 Ⅱ| 快慢指針 哈希表

    環(huán)形鏈表 Ⅱ【LC142】 給定一個鏈表,返回鏈表開始入環(huán)的第一個節(jié)點。 如果鏈表無環(huán),則返回 null。 如果鏈表中有某個節(jié)點,可以通過連續(xù)跟蹤 next 指針再次到達(dá),則鏈表中存在環(huán)。 為了表示給定鏈表中的環(huán),評測系統(tǒng)內(nèi)部使用整數(shù) pos 來表示鏈表尾連接到鏈表中的位置(

    2024年02月15日
    瀏覽(17)
  • 【每日一題Day266】LC18四數(shù)之和 | 排序+雙指針

    四數(shù)之和【 LC18 】 給你一個由 n 個整數(shù)組成的數(shù)組 nums ,和一個目標(biāo)值 target 。請你找出并返回滿足下述全部條件且 不重復(fù) 的四元組 [nums[a], nums[b], nums[c], nums[d]] (若兩個四元組元素一一對應(yīng),則認(rèn)為兩個四元組重復(fù)): 0 = a, b, c, d n a 、 b 、 c 和 d 互不相同 nums[a] + nums[b]

    2024年02月16日
    瀏覽(20)
  • 【每日一題Day262】LC1911最大子序列交替和 | dp

    最大子序列交替和【LC1911】 一個下標(biāo)從 0 開始的數(shù)組的 交替和 定義為 偶數(shù) 下標(biāo)處元素之 和 減去 奇數(shù) 下標(biāo)處元素之 和 。 比方說,數(shù)組 [4,2,5,3] 的交替和為 (4 + 5) - (2 + 3) = 4 。 給你一個數(shù)組 nums ,請你返回 nums 中任意子序列的 最大交替和 (子序列的下標(biāo) 重新 從 0 開始編

    2024年02月15日
    瀏覽(21)
  • 【每日一題Day224】LC2517禮盒的最大甜蜜度 | 二分答案

    禮盒的最大甜蜜度【LC2517】 You are given an array of positive integers price where price[i] denotes the price of the ith candy and a positive integer k . The store sells baskets of k distinct candies. The tastiness of a candy basket is the smallest absolute difference of the prices of any two candies in the basket. Return the maximum tastiness of a

    2024年02月07日
    瀏覽(19)
  • 【每日一題Day191】LC2423刪除字符使頻率相同 | 枚舉 分類討論

    給你一個下標(biāo)從 0 開始的字符串 word ,字符串只包含小寫英文字母。你需要選擇 一個 下標(biāo)并 刪除 下標(biāo)處的字符,使得 word 中剩余每個字母出現(xiàn) 頻率 相同。 如果刪除一個字母后, word 中剩余所有字母的出現(xiàn)頻率都相同,那么返回 true ,否則返回 false 。 注意: 字母 x 的 頻

    2024年02月01日
    瀏覽(28)
  • 【每日一題Day267】LC834樹中距離之和 | 換根dp

    樹中距離之和【LC834】 給定一個無向、連通的樹。樹中有 n 個標(biāo)記為 0...n-1 的節(jié)點以及 n-1 條邊 。 給定整數(shù) n 和數(shù)組 edges , edges[i] = [ai, bi] 表示樹中的節(jié)點 ai 和 bi 之間有一條邊。 返回長度為 n 的數(shù)組 answer ,其中 answer[i] 是樹中第 i 個節(jié)點與所有其他節(jié)點之間的距離之和。

    2024年02月16日
    瀏覽(23)
  • 【每日一題Day292】LC1572矩陣對角線元素的和 模擬

    思路 簡單模擬,主對角線的元素橫縱坐標(biāo)相等,副對角線的元素橫縱坐標(biāo)相加為n-1,注意避免重復(fù)計算 實現(xiàn) 復(fù)雜度 時間復(fù)雜度: O ( log ? n ) mathcal{O}(log n) O ( lo g n ) 空間復(fù)雜度: O ( 1 ) mathcal{O}(1) O ( 1 )

    2024年02月13日
    瀏覽(20)
  • Linux的例行性工作(計劃任務(wù))

    Linux的例行性工作(計劃任務(wù))

    目錄 一、單一執(zhí)行的例行性任務(wù)--at(一 次性) 1、安裝 2、啟動服務(wù) 3、at命令詳解 1)格式 2)參數(shù) 3)時間格式 4、實例 二、循環(huán)執(zhí)行的例行性任務(wù)-- crontab(周期性) 1、crontd服務(wù) 2、工作過程 3、crontab命令詳解 編輯crontab 書寫定時任務(wù)的注意事項 系統(tǒng)級別的計劃任務(wù) 查看

    2024年01月25日
    瀏覽(27)
  • 【每日一題Day331】LC2560打家劫舍 IV | 二分查找 + 貪心

    打家劫舍 IV【LC2560】 沿街有一排連續(xù)的房屋。每間房屋內(nèi)都藏有一定的現(xiàn)金?,F(xiàn)在有一位小偷計劃從這些房屋中竊取現(xiàn)金。 由于相鄰的房屋裝有相互連通的防盜系統(tǒng),所以小偷 不會竊取相鄰的房屋 。 小偷的 竊取能力 定義為他在竊取過程中能從單間房屋中竊取的 最大金額

    2024年02月07日
    瀏覽(24)
  • 【每日一題Day312】LC2240買鋼筆和鉛筆的方案數(shù) | 完全背包 數(shù)學(xué)

    買鋼筆和鉛筆的方案數(shù)【LC2240】 給你一個整數(shù) total ,表示你擁有的總錢數(shù)。同時給你兩個整數(shù) cost1 和 cost2 ,分別表示一支鋼筆和一支鉛筆的價格。你可以花費你部分或者全部的錢,去買任意數(shù)目的兩種筆。 請你返回購買鋼筆和鉛筆的 不同方案數(shù)目 。 一眼背包問題 原來數(shù)

    2024年02月10日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包