Замените повторяющиеся элементы в массиве с минимальными шагами - PullRequest
0 голосов
/ 16 февраля 2020

Я должен создать программу, в которой в данном массиве элементов я должен рассчитать минимальное количество элементов, которые я должен изменить, чтобы не было дубликатов рядом друг с другом.

В каждой комнате windows, и все они на одной высоте, поэтому, когда Мендо ходит по дому и смотрит на них снаружи, windows выглядит так, будто они сложены строка. Mendo имеет три типа цветов (белый, серый и синий) и хочет закрасить windows, чтобы не было двух windows, которые были бы одного цвета и расположены один за другим. Напишите программу, которая будет считывать из стандартного ввода информацию о количестве windows и цене окраски каждого из них определенным цветом, а затем печатать минимальную стоимость раскраски всех windows на стандартном выводе.

Первая строка содержит целое число N (2 <= N <= 20), которое указывает число windows. В каждой из следующих N строк записаны 3 целых числа Ai, Bi, Ci (1 <= Ai, Bi, Ci <= 1000), где Ai, Bi и Ci обозначают значения окраски окна i в белом, сером и синий соответственно. </em>

Контрольный пример: Вход: 3 5 1 5 1 5 5 5 1 1 Выход: 3

Также , Я должен помнить, что первый и последний элементы считаются соседними элементами.

Я начал с сортировки массива по какой-то причине.

int main()
{
    int N;
    cin >> N;
    int Ai, Bi, Ci;

    int A[N * 3];
    int A_space = 0;

    for (int i = 0; i < N; i++) {
        cin >> Ai >> Bi >> Ci;
        A[A_space] = Ai;
        A[A_space + 1] = Bi;
        A[A_space + 2] = Ci;
        A_space += 3;
    }

    for (int i = 0; i < N * 3; i++) {
        for (int j = 0; j < N * 3; j++) {
            if (A[j] > A[j + 1]) {
                swap(A[j], A[j + 1]);
            }
        }
    }

    return 0;
}

1 Ответ

0 голосов
/ 16 февраля 2020

Эту проблему можно решить с помощью динамического программирования c. Для этого вам понадобится матрица N x 3. Вам нужно будет рассчитать минимальную стоимость окраски окна по каждому из 3 цветов для каждого из N windows. Обратите внимание, что для каждого цвета достаточно взять минимум из стоимости закраски N-1 windows для двух других цветов, потому что вы не можете использовать один и тот же цвет 2 раза подряд.

...