我遇到了以下问题陈述.
您有一个自然数量大小的列表,
N您必须将值分配到两个列表A和B大小中N/2,以便A元素的平方和最接近元素的乘法B.示例: 考虑清单7 11 1 9 10 3 5 13 9 12.
优化分布为:
列表A:5 9 9 12 13
列表B:1 3 7 10 11
导致差值abs((5 + 9 + 9) + 12 + 13)^ 2 - (1*3*7*10*11))= 6
因此,您的程序应输出6,这是可以达到的最小差异.
我尝试过的:
我试过贪婪的方法来解决这个问题.我拿了两个变量sum和mul.现在我开始逐个从给定的集合中获取元素,并尝试在变量和计算的当前平方和和乘法中添加它.现在最终确定两组中的一组中的元素,使得组合给出最小可能值.
但是这种方法在给定的示例itselt中不起作用.我无法弄清楚这里可以使用什么方法.
我不是要求解决方案的确切代码.任何可能的方法及其工作原因都没问题.
编辑:
...最好是用Java.这是我有的:
//x choose y
public static double choose(int x, int y) {
if (y < 0 || y > x) return 0;
if (y == 0 || y == x) return 1;
double answer = 1;
for (int i = x-y+1; i <= x; i++) {
answer = answer * i;
}
for (int j = y; j > 1; j--) {
answer = answer / j;
}
return answer;
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的方法来做到这一点?