LeetCode 1335 工作計畫的最低難度

2021-10-02 10:39:41 字數 1035 閱讀 7029

oj

題意

給定一組工作序列的難度,給定天數。完成第i個工作的時候,必須要先完成(0,i-1)的工作,每天的工作難度是這一天完成的工作中難度最大的那乙個,每天的難度之和為完成這組工作難度的總和,每天都必須要有工作。

題解

典型的動態規劃的題目,用dp[i][j]來表示i天一共完成j個任務的最小難度。關係怎麼遞推呢?i天要完成j個任務,只要將這j個任務分配給這幾天就可以了,求出最小分配,假設i天完成了k個任務,那麼前i-1天就要完成j-k個任務,k>=i,k<=任務數量

這樣就能算出i天完成j個任務的最小難度了

public

intmindifficulty

(int

jobdifficulty,

int d)

int[

] dp =

newint

[d +1]

[jobdifficulty.length +1]

; dp[1]

[1]= jobdifficulty[0]

;// 初始化第一天完成i個工作的最小難度

for(

int i =

2; i <= jobdifficulty.length; i++

)// map用來記錄工作陣列中i到j這個區間的最大值

int[

] map =

newint

[jobdifficulty.length]

[jobdifficulty.length]

;for

(int i =

0; i < jobdifficulty.length; i++)}

// 外層迴圈天數

for(

int i =

2; i <= d; i++)}

}// 返回d天完成指定任務的最小難度

return dp[d]

[jobdifficulty.length]

;}

LeetCode 1335 工作計畫的最低難度

動態規劃的本質是列舉,拆分成乙個乙個狀態,每個狀態只和一些狀態相關,由這些狀態轉移。每乙個狀態已經記錄了這個狀態的最優值,每乙個狀態從前面的相關最優狀態轉移過來,選擇最優值。初始狀態需要初始化,根據問題來初始。dp 位置 段數 段數是已分段的數量,因為最後要分成d段,所以需要記錄這個狀態。初始化這裡...

Leetcode 1335 工作計畫的最低難度

題目描述 題解 二維動態規劃,狀態為天數以及依次完成的任務數。注意題目給出的限制,任務需要依次執行,這為構造狀態轉移方程提供了先決條件。定義dp i j 表示i天完成前j個任務的最小難度。狀態轉移的時候,遍歷第i個可能完成的所有工作並取最小值就可以了,記dis i j 為第i個job至第j個job中...

leetcode 338 位元數計位

給定乙個非負整數 num。對於 0 i num 範圍中的每個數字 i 計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2 輸出 0,1,1 示例 2 輸入 5 輸出 0,1,1,2,1,2 高階 思路 對於任意乙個十進位制數來說,有兩種情況。1 奇數,當乙個數為奇數的時候,它對...