Функция 1Confused с двумя различными реализации Heap
void min_heapify(int arr[],int n, int i){
int j, temp;
temp = arr[i];
j = 2 * i;
while (j <= n)
{
if (j < n && arr[j+1] < arr[j])
j = j + 1;
if (temp < arr[j])
break;
else if (temp >= arr[j])
{
arr[j/2] = arr[j];
j = 2 * j;
}
}
arr[j/2] = temp;
}
Функция 2
void max_heapify(int arr[], int n, int i)
{
int largest = i; // Initialize largest as root
int l = 2*i + 1; // left = 2*i + 1
int r = 2*i + 2; // right = 2*i + 2
// If left child is larger than root
if (l < n && arr[l] < arr[largest])
largest = l;
// If right child is larger than largest so far
if (r < n && arr[r] < arr[largest])
largest = r;
// If largest is not root
if (largest != i)
{
swap(arr[i], arr[largest]);
// Recursively heapify the affected sub-tree
heapify(arr, n, largest);
}
}
Проблема Детали
Здесь heapification работают точно так же, чтобы сделать min_heap, но проблема в том, что я использовал кучу в этом ниже probl чтобы решить эту проблему, но, к сожалению, функция 2, которую я реализовал, наблюдая за лекцией MIT, не помогла решить эту проблему, после некоторого времени в Интернете я нашел 1-ю функцию, которая без проблем работала над этой проблемой. Я просто смущен, разве это не одна и та же функция? ------
Проблема
Да !! Название проблемы отражает вашу задачу; просто добавьте набор чисел. Но вы можете почувствовать себя снисходительным, написать программу C/C++, чтобы добавить набор чисел. Такая проблема будет просто подвергать сомнению вашу эрудицию. Итак, давайте добавим в него какой-то вкус изобретательности.
Операция добавления требует затрат сейчас, а стоимость - суммирование этих двух, которые необходимо добавить. Таким образом, добавление 1 и 10, вам нужна стоимость 11. Если вы хотите добавить 1, 2 и 3. Есть несколько способов -
1 + 2 = 3, cost = 3
1 + 3 = 4, cost = 4
2 + 3 = 5, cost = 5
3 + 3 = 6, cost = 6
2 + 4 = 6, cost = 6
1 + 5 = 6, cost = 6
Total = 9
Total = 10
Total = 11
Я надеюсь, что вы уже поняли свою миссию, чтобы добавить набор целых чисел, чтобы стоимость была минимальной.
Входной
Каждый тест будет начинаться с положительным числом, N (2 ≤ N ≤ 5000) с последующим N положительных целых чисел (все меньше 100000). Вход заканчивается случаем, когда значение N равно нулю. Этот случай не должен обрабатываться.
Выход
Для каждого случая выведите минимальную совокупную стоимость того, в одной строке.
SampleInput
3
1 2 3
4
1 2 3 4
0
SampleOutput
9
19
Возможно родственный: Подумайте о том, что происходит с * второй * часть '(J <п && обр [J + 1] <обр [у])' делает, когда первая часть относится к 'J = (n-1) '. Если 'n' является * величиной * (числом элементов), которая была бы плохой. (но опять же, так что 'while (j <= n)'). – WhozCraig
Вы делаете max heapify или min heapify для второй функции? – fluter
Оба были min_heapify, ans, котор оно теперь разрешено спасибо все равно ... –