avatar
问一题,30分钟做完# JobHunting - 待字闺中
j*d
1
给你一个数组,有偶数个数,要分成2个数组,每个数组所含的数的个数一样。要求两
数组和的差最小。
以为是背包,后来发现,无法得到2个equal size的数组。如何解决?除了greedy。
avatar
a*k
2
dfs
avatar
P*r
3
咋做?想不出来啊。。


: dfs



【在 a****k 的大作中提到】
: dfs
avatar
j*d
4
难道不会MLE。

【在 a****k 的大作中提到】
: dfs
avatar
n*n
5
排序吧。
avatar
h*1
6
排序+ greedy

【在 j*****d 的大作中提到】
: 给你一个数组,有偶数个数,要分成2个数组,每个数组所含的数的个数一样。要求两
: 数组和的差最小。
: 以为是背包,后来发现,无法得到2个equal size的数组。如何解决?除了greedy。

avatar
d*n
7
我记得这个题是某次lc周赛的原题
隐约记得是二分找
具体的得再想想
avatar
a*a
9

sort in reverse order, then do dfs with pruning (early return if sum is
worse than current best result).

【在 j*****d 的大作中提到】
: 给你一个数组,有偶数个数,要分成2个数组,每个数组所含的数的个数一样。要求两
: 数组和的差最小。
: 以为是背包,后来发现,无法得到2个equal size的数组。如何解决?除了greedy。

avatar
p*r
10
凭俺猪一样的智商,
目前想到只有是暴力dfs往下撸,
设一个min difference = max作为初始,
然后dfs往下撸,
不到n/2,就比min大的咔嚓掉
到了n/2, 更新min
avatar
p*r
11
为啥要sort

【在 a****a 的大作中提到】
:
: sort in reverse order, then do dfs with pruning (early return if sum is
: worse than current best result).

avatar
p*r
12
感觉上这个是对的,但是理论上没法证明。

【在 h***1 的大作中提到】
: 排序+ greedy
avatar
j*d
13
我突然觉得,背包就可以做,只是,boolean[] 变成 Node【】。 node里面,2个field
,reachable 一个boolean量。num 一个int,记录和为这个数的时候,用的个数?
avatar
h*1
14
先看看4个教怎样选的理论,然后extend到 6,8,...

【在 p**r 的大作中提到】
: 感觉上这个是对的,但是理论上没法证明。
avatar
n*g
16
回头看了一眼上面的回复..
菜是有原因的.
avatar
l*r
17
先排序,然后a_1,a_2,...,a_(2n-1),a_(2n)
分组
a_1,a_(2n),a_3,a_(2n-2),...
a_2,a_(2n-1),a_4,a_(2n-3),...
当n=2是可以证明
a3 + a4 - a1 - a2 >= a1 + a4 - a2 - a3 >= a1 + a2 - a3 - a4
a4 + a2 - a1 - a3 >= a1 + a4 - a2 - a3 >= a1 + a3 - a2 - a4
所以abs(a1 + a4 - a2 - a3) <= abs(a3 + a4 - a1 - a2)
abs(a1 + a4 - a2 - a3) <= abs(a2 + a4 - a1 - a3)
如果n>=4,假设交换a_i,a_j (a_i with + sign and a_j with - sign with a_i <=
a_j).
so a_(2n-i + 1) >= a_(2n-j+1)
a_(2n-i+1) + a_j - a_i -a_(2n-j+1) >= a_(2n-i+1) + a_i - a_(2n-j+1) - a_j >=
a_i + a_(2n-j+1) - a_j - a_(2n-i+1)
如果a_i>=a_j,则a_(2n - i + 1) <= a_(2n-j + 1)
a_(2n-i+1) + a_j - a_i -a_(2n-j+1) <= a_(2n-i+1) + a_i - a_(2n-j+1) - a_j <=
a_i + a_(2n-j+1) - a_j - a_(2n-i+1)
所以任意交换两项都会让absolute diff变大。
这个分组是最佳的。

【在 j*****d 的大作中提到】
: 给你一个数组,有偶数个数,要分成2个数组,每个数组所含的数的个数一样。要求两
: 数组和的差最小。
: 以为是背包,后来发现,无法得到2个equal size的数组。如何解决?除了greedy。

avatar
n*e
18
不错

<=

【在 l******r 的大作中提到】
: 先排序,然后a_1,a_2,...,a_(2n-1),a_(2n)
: 分组
: a_1,a_(2n),a_3,a_(2n-2),...
: a_2,a_(2n-1),a_4,a_(2n-3),...
: 当n=2是可以证明
: a3 + a4 - a1 - a2 >= a1 + a4 - a2 - a3 >= a1 + a2 - a3 - a4
: a4 + a2 - a1 - a3 >= a1 + a4 - a2 - a3 >= a1 + a3 - a2 - a4
: 所以abs(a1 + a4 - a2 - a3) <= abs(a3 + a4 - a1 - a2)
: abs(a1 + a4 - a2 - a3) <= abs(a2 + a4 - a1 - a3)
: 如果n>=4,假设交换a_i,a_j (a_i with + sign and a_j with - sign with a_i <=

avatar
l*m
19
如果同时交换两个元素呢?因为两个元素的和可能导致更细的粒度

:先排序,然后a_1,a_2,...,a_(2n-1),a_(2n)
:分组
avatar
w*d
20
不对吧,假如是1,2,3,4,5,100。最好分组难道不是1,2,100和3,4,5?

<=

【在 l******r 的大作中提到】
: 先排序,然后a_1,a_2,...,a_(2n-1),a_(2n)
: 分组
: a_1,a_(2n),a_3,a_(2n-2),...
: a_2,a_(2n-1),a_4,a_(2n-3),...
: 当n=2是可以证明
: a3 + a4 - a1 - a2 >= a1 + a4 - a2 - a3 >= a1 + a2 - a3 - a4
: a4 + a2 - a1 - a3 >= a1 + a4 - a2 - a3 >= a1 + a3 - a2 - a4
: 所以abs(a1 + a4 - a2 - a3) <= abs(a3 + a4 - a1 - a2)
: abs(a1 + a4 - a2 - a3) <= abs(a2 + a4 - a1 - a3)
: 如果n>=4,假设交换a_i,a_j (a_i with + sign and a_j with - sign with a_i <=

avatar
w*d
21
最好的解法还是DP吧。假设F(k, n, m)表示在1到m个元素中和离k最近的n个元素,那原
题就是求F(sum/2, n/2, n)。递推公式就是 F(k, n, m) = better{F(k-x_m, n-1, m-1
), F(k, n, m-1)}。最后复杂度是 sum * n^2, 是pseudo-polynomia。如果整数都有
bound,那就是n^3。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。