[
greedy
simulation
]
BinarySearch 0875 Fruit Basket Packing
Problem statement
https://binarysearch.com/problems/Fruit-Basket-Packing/
Solution
A bit strange problem in my opinion. What we need to do here is to simulate process, but we need to follow order. So, for each cost, size, cnt in fruits, we first find all full baskets avaliable and keep them in form (size, cost, number of such baskets). Similar logic is for not full baskets, we can have only 1 of them. Then we sort all candidates in correct order and use greedy strategy.
Complexity
It is O(n log n) for time and O(n) for space.
Code
class Solution:
def solve(self, fruits, k, s):
baskets, ans = [], 0
for cost, size, cnt in fruits:
if size > s: continue
x, _ = divmod(s, size)
f, r = divmod(cnt, x)
if x: baskets.append((x * size, x * cost, f))
if r: baskets.append((r * size, r * cost, 1))
for _, b_cst, b_aval in sorted(baskets, key=lambda b: (-b[0], b[1])):
if k == 0: break
taken = min(k, b_aval)
ans += taken * b_cst
k -= taken
return ans