leetcode 盈利計畫(二維費用01揹包)

2021-10-22 04:36:14 字數 1295 閱讀 5138

集團裡有 n 名員工,他們可以完成各種各樣的工作創造利潤。

第 i 種工作會產生 profit[i] 的利潤,它要求 group[i] 名成員共同參與。如果成員參與了其中一項工作,就不能參與另一項工作。

工作的任何至少產生 minprofit 利潤的子集稱為盈利計畫。並且工作的成員總數最多為 n 。

有多少種計畫可以選擇?因為答案很大,所以 返回結果模 10^9 + 7 的值。

示例 1:

輸入:n = 5, minprofit = 3, group = [2,2], profit = [2,3]

輸出:2

解釋:至少產生 3 的利潤,該集團可以完成工作 0 和工作 1 ,或僅完成工作 1 。

總的來說,有兩種計畫。

示例 2:

輸入:n = 10, minprofit = 5, group = [2,3,5], profit = [6,7,8]

輸出:7

解釋:至少產生 5 的利潤,只要完成其中一種工作就行,所以該集團可以完成任何工作。

有 7 種可能的計畫:(0),(1),(2),(0,1),(0,2),(1,2),以及 (0,1,2) 。

1 <= n <= 100

0 <= minprofit <= 100

1 <= group.length <= 100

1 <= group[i] <= 100

profit.length == group.length

0 <= profit[i] <= 100

總共有n名員工,至少要產生minprofit利潤。

每份工作消耗gourp[i]名員工,產生profit[i]的價值。

總共有group.size()份工作。

對於每份工作,我們可以選擇做還是不做。最後,我們要求價值》=minprofit的方案。

看到這,應該會想到和二位費用01揹包很像了吧。工作就是物品,員工就是容量,利潤就是價值。

那麼,我們可以定義:

dp[j][k]表示對於前i份工作,此時還擁有j名員工,還需要產生k個價值。i省略,通過滾動陣列優化了空間。

dp[j][k] = dp[j][k] + dp[j-group[i]][k-profit[i]]

class solution }}

return dp[n][m];

}};

LeetCode 搜尋二維矩陣

編寫乙個高效的演算法來判斷 m x n 矩陣中,是否存在乙個目標值。該矩陣具有如下特性 每行中的整數從左到右按公升序排列。每行的第乙個整數大於前一行的最後乙個整數。示例 1 輸入 matrix 1,3,5,7 10,11,16,20 23,30,34,50 target 3 輸出 true示例 2 ...

LeetCode 搜尋二維矩陣II

編寫乙個高效的演算法來搜尋 m x n 矩陣 matrix 中的乙個目標值 target。該矩陣具有以下特性 每行的元素從左到右公升序排列。每列的元素從上到下公升序排列。示例 現有矩陣 matrix 如下 1,4,7,11,15 2,5,8,12,19 3,6,9,16,22 10,13,14,17...

Leetcode初學 搜尋二維矩陣

我們已知該二維陣列的每一行都是有序的,所以我們可以從這裡下手 我們可以根據每一行的最後乙個數判斷target應該會出現在哪一行 我們從上到下進行搜尋 確定target會在行數 再在該行中進行遍歷搜尋 class solution public boolean searchmatrix int mat...