题目:
一个厨师收集了他 n 道菜的满意程度 satisfaction ,这个厨师做出每道菜的时间都是 1 单位时间。 一道菜的 「 like-time 系数 」定义为烹饪这道菜结束的时间(包含之前每道菜所花费的时间)乘以这道菜的满意程度, 也就是 time[i]*satisfaction[i] 。 返回厨师在准备了一定数量的菜肴后可以获得的最大 like-time 系数 总和。 你可以按任意顺序安排做菜的顺序,你也可以选择放弃做某些菜来获得更大的总和。
class Solution:
def maxSatisfaction(self, satisfaction: List[int]) -> int:
# 直接模拟 没想到会通过
satisfaction.sort()
n = len(satisfaction)
ret = 0
for i in range(n):
tmp = 0
for j in range(i,n):
# 从第i个开始做
tmp += satisfaction[j] * (j-i+1)
# 比较从第i个开始做的最大值
ret = max(ret,tmp)
return ret
class Solution:
def maxSatisfaction(self, satisfaction: List[int]) -> int:
# 优化
satisfaction.sort()
n = len(satisfaction)
ret = 0
tmp = 0 # 用于记录前缀和
total_sum = 0 # 用于记录总和
for i in range(n - 1, -1, -1):
tmp += satisfaction[i]
total_sum += tmp
if total_sum > ret:
ret = total_sum
return ret if ret > 0 else 0