思路:
使用贪心思想+最小堆。先以效率为基准降序排序,那么当前遍历到的效率就是可见的最小效率,用这个最小效率与小顶堆的速度之和相乘,再取max(当前最大价值,全局最大价值)。
# 6 # 2 10 3 1 5 8 # 5 4 3 9 7 2 # 2 # 输出:60 import heapq def f(n,speed,efficiency,k): nums=list(zip(speed,efficiency)) #(速度,效率) nums.sort(key=lambda x:x[1],reverse=True) min_heap=[] #小顶堆 cur_total_s=0 max_val=0 for s,e in nums: heapq.heappush(min_heap,s) #当前速度加入小顶堆 cur_total_s+=s #累加速度 if len(min_heap)>k: #如果超过了最大选择数,就从小顶堆弹出最小的 x=heapq.heappop(min_heap) cur_total_s-=x cur_val=cur_total_s*e #当前团队最大合作值 max_val=max(cur_val,max_val) #更新全局 print(max_val%(10**9+7)) return def main(): n=int(input()) speed=list(map(int,input().split())) efficiency=list(map(int,input().split())) k=int(input()) f(n,speed,efficiency,k) if __name__=="__main__": main()