Я добавил комментарий, но удалил его, поскольку понял, что допустил ошибку. Тем не менее, я сделал еще несколько экспериментов. Я добавляю это как ответ, чтобы иметь возможность использовать форматирование.
Я не проводил обширных экспериментов, поэтому я не гарантирую, что это верно для всех ситуаций, но тесты, которые я сделал, показывают, что, если вы сортируетенабор чисел, то этот факт, кажется, справедливо (когда n <= m): </p>
minval = (sum of first item(s) * sum of [remaining] last item(s))
maxval = (sum of first item(s) + last item(s)) * (sum of [remaining] middle item(s))
Например, если вы получите набор A {4, 8, 1, 6, 3} => A {1, 3, 4, 6, 8} и n = 2, тогда:
minval = (A[0] + A[1]) * (A[2] + A[3] + A[4]) = 72
maxval = (A[0] + A[4]) * (A[1] + A[2] + A[3]) = 135
Для своих экспериментов я использовал заданные длины от len = 4 до len = 8. Эти эксперименты показывают, чтовыше, кажется, справедливо все время для этих установленных длин, и с изменениями n от n = 2 до n = (set.length-2) (для n = 1 (и n = (set.length-1))ответ очевиден). Для set.length = 3, кажется, немного отличается, но непротиворечиво каждый раз, когда с этими комбинациями дают минимальное и максимальное значения.
Так как это верно для заданных длин от 4 до 8, я предполагаю, что это имеет место для заданных длинтакже больше, чем 8.
Заданная длина 3 является своего рода «крайними случаями», но все же непротиворечива, если отсортирована по (или это не непосредственно крайний случай, но факт, что n> m):
minval = A[1] * (A[2]) * A[3]
maxval = (A[1] + A[2]) * A[3]
Задать длины 1 и 2 (если они существуют) - простые случаи.
Следовательно, если приведенное выше всегда верно, вам нужно только отсортировать список и затем вычислить минимальное и максимальное значениякак указано выше, что многое упрощает, я думаю.
РЕДАКТИРОВАТЬ: После или до сортировки, вы можете рассчитать сумму набора. Тогда вам нужно только сделать:
x1 = (A[0] + A[1])
x2 = (A[0] + A[4])
minval = x1 * (totalsum - x1) = 72
maxval = x2 * (totalsum - x2) = 135
EDIT2: после дальнейших экспериментов, похоже, что вышеприведенное не выполняется во всех случаях, как описано выше, но есть образец, который я уверен, что вы можетевоспользоваться.