所以,我們的目標是獲得儘可能接近0越好。
我首先想到的是,我會按降序排序的數組,然後在列表上迭代做這樣的事情:
int total = 0;
foreach(int i in a)
{
total = Math.Min(Math.Abs(total - i), Math.Abs(total + i));
}
這將工作a={1,5,2,-2}
(總量將是以下5,4,2,0
)
但我不確定它是否適用於所有情況。我會仔細研究一下,看看是否有不適合的情況。
編輯:
好吧,我猜蠻力將工作?
public static int MinArray(int[] array)
{
int val = int.MaxValue;
for (int i = 0; i < Math.Pow(2, array.Length); i++)
{
val = Math.Min(CalcMin(array, i), val);
}
return val;
}
private static int CalcMin(int[] array, int negs)
{
int ret = 0;
for (int i = 0; i < array.Length; i++)
{
int neg = 1;
if (negs != 0)
{
neg = negs % 2 == 1 ? -1 : 1;
negs >>= 1;
}
ret += array[i] * neg;
}
return Math.Abs(ret);
}
所以,我在做什麼走S的每個迭代(這是由我走在MinArray
二進制計算),並找到最小的方式。
通過修改基因的一點點,你也可以得到對S中的正確的值(如果這是必需的。如果不是,使其成爲一個要求可能得分,你在採訪中一些點?)
你能解釋更詳細的是什麼VAL(X,Y)?如果我理解正確的話,VAL(X,Y)試圖找到X和取得的線性組合的ÿ 1和-1的最接近的值爲0 ... – 2011-04-19 14:25:48
我編輯了這個問題,我認爲它現在應該更清楚 – yahh 2011-04-19 14:27:52
該函數可以返回負值嗎?因爲如果S = {{-1,-1,-1,1}},返回值將是小於'0'的-10。......啊,但是ABS,沒關係,編輯清除 – 2011-04-19 14:30:09