火柴排队(NOIP2013D1T2)

数学分析+重构数组+逆序对

数学分析:

我们是要求(aibi)2的最小值,展开可以发现∑ai^2∑bi^2的值是不会变的,也就是说只用关注交叉项就可以了,求最小值,也就是要使所有交叉项的和最大。

我们可以通过排序不等式来证明。

排序不等式的证明:

火柴排队(NOIP2013D1T2)

只用记住同序和大于等于乱序和大于等于逆序和。所以,当他们为同序和时也即他们数位大小相等时,他们的和最大。

重构数组:C[a[i]]=b[i];

若是两个数组的数位全部对应相等,那么c[i]=i为上升序列;我们可以模拟一下。

a[i]={1,4,3,2},b[i]={1,3,4,2};根据上面的式子我们可以构造出c[i]={1,2,4,3}发现它总体并不是一个上升序列,但是1,2却是上升的,也就是说里面有两个数位已经对齐了。我们的目的是要使没有上升排列的C数组通过交换变成上升的序列。若是没有上升显然它就是下降的,而求下降的话我们就会想到曾经非常熟悉的求逆序对。(洛谷P1908

求逆序对

求逆序对有两种常用的办法:归并排序和树状数组。

1.归并排序:

火柴排队(NOIP2013D1T2)

2.树状数组:

火柴排队(NOIP2013D1T2)

解决了主要难题剩下的问题不大了。

相关文章: