3789.采购的最小花费:三种情况无脑算(不用思考不用贪心)
【LetMeFly】3789.采购的最小花费:三种情况无脑算(不用思考不用贪心)
力扣题目链接:https://leetcode.cn/problems/minimum-cost-to-acquire-required-items/
给你五个整数 cost1, cost2, costBoth, need1 和 need2。
有三种类型的物品可以购买:
- 类型 1 的物品花费
cost1,并仅满足类型 1 的需求 1 个单位。 - 类型 2 的物品花费
cost2,并仅满足类型 2 的需求 1 个单位。 - 类型 3 的物品花费
costBoth,同时满足类型 1 和类型 2 的需求各 1 个单位。
你需要购买足够的物品,使得:
- 满足类型 1 的总需求 至少 为
need1。 - 满足类型 2 的总需求 至少 为
need2。
返回满足这些需求的 最小 可能总花费。
示例 1:
输入: cost1 = 3, cost2 = 2, costBoth = 1, need1 = 3, need2 = 2
输出: 3
解释:
购买 3 个类型 3 的物品,总花费为 3 * 1 = 3,此时类型 1 的总需求满足 3(>= need1 = 3),类型 2 的总需求满足 3(>= need2 = 2)。
任何其他有效的购买方案都会花费更多,因此最小总花费为 3。
示例 2:
输入: cost1 = 5, cost2 = 4, costBoth = 15, need1 = 2, need2 = 3
输出: 22
解释:
购买 need1 = 2 个类型 1 的物品和 need2 = 3 个类型 2 的物品,总花费为 2 * 5 + 3 * 4 = 10 + 12 = 22。
任何其他有效的购买方案都会花费更多,因此最小总花费为 22。
示例 3:
输入: cost1 = 5, cost2 = 4, costBoth = 15, need1 = 0, need2 = 0
输出: 0
解释:
由于不需要任何物品(need1 = need2 = 0),因此无需购买,总花费为 0。
提示:
1 <= cost1, cost2, costBoth <= 1060 <= need1, need2 <= 109
能不动脑子就不动脑子(bushi)
解题方法:取最小
一共就三种购买方法:
- 类型1和类型2分别买:$cost1 \times need1 + cost2 \times need2$
- 类型1和类型2重叠部分一块买,剩下部分单独买(不妨假设
need1需要的少,否则同理):$costBoth \times need1 + cost2 \times (need2 - need1)$ - 全部买类型3:$costBoth \times max(need1, need2)$
三种购买方法取最小值即可。
- 时间复杂度$O(1)$
- 空间复杂度$O(1)$
AC代码
C++
1 | |
End
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
千篇源码题解已开源