首页 > 代码库 > GCJ——Minimum Scalar Product(2008 Round1 AA)
GCJ——Minimum Scalar Product(2008 Round1 AA)
题意:
给定两组各n个数,可任意调整同一组数之中数字的顺序,求 sum xi*yi i=1..n的最小值。
Small: n<=8
abs xy,yi<=1000
Large: n<=800
abs xi,yi <= 100000
假如两个数字之和为固定,那么两数字之积最大当且仅当两两数字尽量接近。
所以,直觉告诉我们——将x升序排列,y降序排列,所得对应积最大。
因为顺序可以任意调整,所以我们完全可以固定x的数字顺序,仅仅思考y的数字顺序。
验证:
当n=2时:
当仅有两个数的时候 x1,x2,y1,y2 ,假定标号大的数字也大。
x1*y2+x2*y1 - (x1*y1 + x2*y2)
x1(y2 - y1) + x2 (y1-y2)
(x1-x2)(y2-y1) < 0
显然,n=2的情况下是符合的。
当n>2时:
假设最优解中,存在 ya,yb,有b>a且ya>yb(不是按照降序排列的),显然根据n=2,交换他们的位置,就会得到更小的答案。
所以,假设正确。
另外,还有很重要的一点,就是在Larger数据下,xi*yi是可能会溢出int的(10^10),数据要选择好。
GCJ——Minimum Scalar Product(2008 Round1 AA)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。