1037 Magic Coupon
题目大意:给出两行整数(包括负数和0),两两乘积求和,问和的最大值
思路:贪心算法,先将非负数按从大到小排序,再将负数从小到大排序,一次对应乘积加起来即可,注意0要跳过。测试点4没过
n=int(input())
coupon=list(map(int,input().split()))
m=int(input())
product=list(map(int,input().split()))
coupon.sort(key=lambda x:-x if x>=0 else x)
product.sort(key=lambda x:-x if x>=0 else x)
total=0
i=0
j=0
while i<n and j<m:
if coupon[i]*product[j]>0:
total+=coupon[i]*product[j]
i+=1
j+=1
else:
while coupon[i]>=0: #过滤掉正数和0
i+=1
if i>=n:
break
while product[j]>=0:
j+=1
if j>=m:
break
print(total,end="")
这篇博客介绍了如何运用贪心算法解决一个数学问题:给定两行整数,目标是找到最大的两两乘积之和。作者首先将非负数和负数分别进行排序,然后依次计算乘积并累加,以找到最大总和。虽然测试点4未通过,但这种方法提供了一个解决问题的思路。
358

被折叠的 条评论
为什么被折叠?



