[
dp
dfs
]
Leetcode 0808 Soup Servings
Problem statement
https://leetcode.com/problems/soup-servings/
Solution
We can look at this problem as dp problem with state a, b
: ml of soup of both types. Then if both qualities are zero, we return 0.5
, if soup A
is empty, we return 1
and if soup B
is empty, we return 0
. Then we check 4
possibilities we have and return average of them. Also we can notice, that if N
is big enough, then probability is very close to 1
.
Complexity
Time complexity is O(n^2)
, where n = N/25
is possible range of our volumes of soup, space complexity as well. Note, that if n > 500
, we return 1
.
Code
class Solution:
def soupServings(self, N):
@lru_cache(None)
def dfs(a, b):
if a == 0 and b == 0: return 0.5
if a == 0: return 1
if b == 0: return 0
cand1 = dfs(max(a-100, 0), b)
cand2 = dfs(max(a-75, 0), max(b-25, 0))
cand3 = dfs(max(a-50, 0), max(b-50, 0))
cand4 = dfs(max(a-25, 0), max(b-75, 0))
return (cand1 + cand2 + cand3 + cand4)/4
return dfs(N, N) if N < 7500 else 1