11664. Разбиение
массива
Задан массив из 2n целых
чисел.
Сгруппируйте эти числа в n
пар (a1, b1), (a2, b2),
..., (an, bn) так чтобы сумма min(ai,
bi) для всех i была наибольшей.
Вход. Первая строка содержит одно число
n (n ≤ 105). Вторая строка содержит 2n целых
чисел, каждое из которых по модулю не больше 105.
Выход. Выведите наибольшее возможное
значение суммы
Пример
входа |
Пример
выхода |
2 4 1 3 2 |
4 |
жадность
Пусть x1 ≤ x2
≤ … x2n – отсортированный массив. Разбиение на пары его элементов проведем следующим
образом: (x1, x2), (x3, x4), …, (x2n-1, x2n). Тогда искомая
сумма равна сумме элементов отсортированного массива с нечетными индексами:
min(x1, x2) + min(x3, x4) + … + min(x2n-1, x2n) = x1 + x3 + … + x2n-1
Пример
Отсортированный массив имеет вид:
(1, 2, 3, 4).
Разобьём числа на пары: (1, 2), (3,
4). Тогда искомая сумма будет равна
min(1, 2) + min(3, 4) = 1 + 3 = 4
Реализация алгоритма
Читаем входные данные.
scanf("%d", &n);
v.resize(2
* n);
for (i = 0; i < 2 * n; i++)
scanf("%d", &v[i]);
Сортируем массив.
sort(v.begin(),
v.end());
В переменной s вычисляем искомую сумму.
s = 0;
for (i = 0; i < 2 * n; i += 2)
s += v[i];
Выводим ответ.
printf("%lld\n", s);