Учитывая список A (размер N) с положительным целым числом (от 0 до 1000), вы должны объединить все элементы списка, суммируя по 2 элемента за раз и добавляя предыдущий результат.
Например, O = {P, Q, R} можно объединить тремя различными способами:
- сначала объединить P с Q, а затем объединить результат с R
- сначала объединить P с R, затем объединить результат с Q
- сначала объединить R с Q, а затем объединить результат с P
Вы должны найти наименьшую суммутребуется объединить список и вернуть его.
Например, A = {100, 250, 1000}, 3 возможных стратегии слияния:
- объединить P с Q: 350;результат с R: 1350;итого: 1700
- слияние P с R: 1100;результат с R: 1350;итого: 2450
- слияние P с Q: 1250;результат с R: 1350;итого: 2600
Наименьшая сумма - 1700.
Чтобы решить эту проблему, мой подход заключался в том, что, если логически отсортировать список и сначала просто добавить наименьшие элементы, он должен вернутьправильный результат:
public static int Solution(int[] A)
{
if (A.Length < 2)
return 0;
var max = 0;
Array.Sort(A);
var current = A[0];
for(var i = 1; i<A.Length; i++)
{
current += A[i];
max += current;
}
return max;
}
Есть идеи?
Изменить: Это была онлайн-оценка, которая была отклонена без какого-либо ответа, я просто пытаюсь улучшить себя и понять, почему это не так