class Solution:
def distMoney(self, money: int, children: int) -> int:
# @cache
# def dp(money, children):
# if children == 0:
# if money == 0: return 0
# return -inf
# if money == 0: return -inf
# ans = -inf
# for i in range(1, money+1):
# if i == 4: continue
# ans = max(ans, int(i == 8) + dp(money - i, children - 1))
# return ans
# ans = dp(money, children)
# if ans == -inf: return -1
# return ans
if money < children: return -1
dp = [[-inf] * (children+1) for _ in range(money+1)]
dp[0][0] = 0
for i in range(money+1):
for j in range(1, children+1):
for k in range(1, i+1):
if k == 4: continue
dp[i][j] = max(dp[i][j], int(k == 8) + dp[i - k][j - 1])
return -1 if dp[-1][-1] == -inf else dp[-1][-1]
class Solution:
def distMoney(self, money: int, children: int) -> int:
money -= children # 每人至少 1 美元
if money < 0: return -1
ans = min(money // 7, children) # 初步分配,让尽量多的人分到 8 美元
money -= ans * 7
children -= ans
# children == 0 and money:必须找一个前面分了 8 美元的人,分配完剩余的钱
# children == 1 and money == 3:不能有人恰好分到 4 美元
if children == 0 and money or \
children == 1 and money == 3:
ans -= 1
return ans