Welcome to Subscribe On Youtube
3789. Minimum Cost to Acquire Required Items
Description
You are given five integers cost1, cost2, costBoth, need1, and need2.
There are three types of items available:
- An item of type 1 costs
cost1and contributes 1 unit to the type 1 requirement only. - An item of type 2 costs
cost2and contributes 1 unit to the type 2 requirement only. - An item of type 3 costs
costBothand contributes 1 unit to both type 1 and type 2 requirements.
You must collect enough items so that the total contribution toward type 1 is at least need1 and the total contribution toward type 2 is at least need2.
Return an integer representing the minimum possible total cost to achieve these requirements.
Example 1:
Input: cost1 = 3, cost2 = 2, costBoth = 1, need1 = 3, need2 = 2
Output: 3
Explanation:
After buying three type 3 items, which cost 3 * 1 = 3, the total contribution to type 1 is 3 (>= need1 = 3) and to type 2 is 3 (>= need2 = 2).
Any other valid combination would cost more, so the minimum total cost is 3.
Example 2:
Input: cost1 = 5, cost2 = 4, costBoth = 15, need1 = 2, need2 = 3
Output: 22
Explanation:
We buy need1 = 2 items of type 1 and need2 = 3 items of type 2: 2 * 5 + 3 * 4 = 10 + 12 = 22.
Any other valid combination would cost more, so the minimum total cost is 22.
Example 3:
Input: cost1 = 5, cost2 = 4, costBoth = 15, need1 = 0, need2 = 0
Output: 0
Explanation:
Since no items are required (need1 = need2 = 0), we buy nothing and pay 0.
Constraints:
1 <= cost1, cost2, costBoth <= 1060 <= need1, need2 <= 109
Solutions
Solution 1: Case Analysis
We can divide the purchasing strategy into three cases:
- Only buy Type 1 and Type 2 items. The total cost is $a = \textit{need1} \times \textit{cost1} + \textit{need2} \times \textit{cost2}$.
- Only buy Type 3 items. The total cost is $b = \textit{costBoth} \times \max(\textit{need1}, \textit{need2})$.
- Buy some Type 3 items, and purchase Type 1 and Type 2 items separately for the remaining needs. Let $\textit{mn} = \min(\textit{need1}, \textit{need2})$, then the total cost is $c = \textit{costBoth} \times \textit{mn} + (\textit{need1} - \textit{mn}) \times \textit{cost1} + (\textit{need2} - \textit{mn}) \times \textit{cost2}$.
Finally, we return the minimum value among the three cases, $\min(a, b, c)$.
The time complexity is $O(1)$, and the space complexity is $O(1)$.
-
class Solution { public long minimumCost(int cost1, int cost2, int costBoth, int need1, int need2) { long a = (long) need1 * cost1 + (long) need2 * cost2; long b = (long) costBoth * Math.max(need1, need2); int mn = Math.min(need1, need2); long c = (long) costBoth * mn + (long) (need1 - mn) * cost1 + (long) (need2 - mn) * cost2; return Math.min(a, Math.min(b, c)); } } -
class Solution { public: long long minimumCost(int cost1, int cost2, int costBoth, int need1, int need2) { long long a = 1LL * need1 * cost1 + 1LL * need2 * cost2; long long b = 1LL * costBoth * max(need1, need2); int mn = min(need1, need2); long long c = 1LL * costBoth * mn + 1LL * (need1 - mn) * cost1 + 1LL * (need2 - mn) * cost2; return min({a, b, c}); } }; -
class Solution: def minimumCost( self, cost1: int, cost2: int, costBoth: int, need1: int, need2: int ) -> int: a = need1 * cost1 + need2 * cost2 b = costBoth * max(need1, need2) mn = min(need1, need2) c = costBoth * mn + (need1 - mn) * cost1 + (need2 - mn) * cost2 return min(a, b, c) -
func minimumCost(cost1 int, cost2 int, costBoth int, need1 int, need2 int) int64 { a := int64(need1)*int64(cost1) + int64(need2)*int64(cost2) b := int64(costBoth) * int64(max(need1, need2)) mn := min(need1, need2) c := int64(costBoth)*int64(mn) + int64(need1-mn)*int64(cost1) + int64(need2-mn)*int64(cost2) return min(a, min(b, c)) } -
function minimumCost( cost1: number, cost2: number, costBoth: number, need1: number, need2: number, ): number { const a = need1 * cost1 + need2 * cost2; const b = costBoth * Math.max(need1, need2); const mn = Math.min(need1, need2); const c = costBoth * mn + (need1 - mn) * cost1 + (need2 - mn) * cost2; return Math.min(a, b, c); }