首页 > 其他 > 详细

GCJ——Minimum Scalar Product(2008 Round1 AA)

时间:2014-10-20 16:45:19      阅读:251      评论:0      收藏:0      [点我收藏+]

题意:

  给定两组各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)

原文:http://www.cnblogs.com/dandi/p/4037242.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!