Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
Алгоритмы Стековая машина https://www.cyberforum.ru/ algorithms/ thread1341513.html
Ребята, простой вопрос. Бинарная стековая операция к примеру ADD складывает два верхних числа и результат кладет - на вершину стека с помощью push, или же предварительно удаляет операнды а потом кладет в стек
Алгоритмы Математическое решение нахождения минимального элемента в массиве
Привет все нужна помощь нужно написать математическое решение нахождения минимального элемента в массиве. Я написал вот так. Программа “Нахождение минимального значения среди элементов массива”.Что бы выполнить операцию нахождения минимального значения среди элементов массива пользователь должен сначала ввести размер массива. Далее программа делает предположение, что первый элемент массива...
Алгоритмы Адаптивная кластеризация https://www.cyberforum.ru/ algorithms/ thread1340505.html
Какой метод адаптивной кластеризации в следующем примере? Есть три измерения: x y z. Х- соответствует количеству предприятий возобновляемой энергии, Y -это уровень оптимизации общих процессов, а Z- принимают как глубину анализа общих бизнес процессов для предприятий анализируемого кластера. На этом сайте подробное описание.. Спасибо! http://www.economy.nayka.com.ua/?op=1&z=763
Алгоритмы Волновой алгоритм поиска кратчайшего пути Доброго времени суток. Помогите пожалуйста решить задание. Необходимо составить(и желательно, объяснить) волновой алгоритм. Дано поле(например, 10х10), колобок(источник), пенек(приемник) и расставленные в случайном порядке елки(препятствия(10 штук)). Принцип работы волнового ортогонального алгоритма более-менее понятен, но вот с составлением алгоритма - тупик. https://www.cyberforum.ru/ algorithms/ thread1340494.html
Алгоритмы Алгоритм перемещения шахматного коня из точки А в точку Б
Задание: На стороне клиента задаются размеры шахмотной доски MxN. Так же пользователь расставляет на доске белого коня и черного ферзя. Может передвигать их по доске, пока расстановка фигур его не устроит. После этого пользователь жмёт кнопку «Старт» 2. На сервер по ajax отправляется конфигурация доски и расстановка фигур. Сервер вычисляет, как должен ходить конь, чтобы срубить ферзя, если тот...
Алгоритмы Составить правильно подробный алгоритм Необходимо составить подробный алгоритм формирования направления движения,исходя из этих алгоритмов. https://www.cyberforum.ru/ algorithms/ thread1339468.html
Алгоритмы Алгоритм флойда - уоршелла находит не все пути Пытаюсь реализовать этот алгоритм под c# и unity. вот создание начальных матриц. for (int i = 0; i < Tiles.Length; i++) { for (int j = 0; j < Tiles.Length; j++) { for (int k = 0; k < Tiles.GetComponent<Path>().goss.Length; k++) https://www.cyberforum.ru/ algorithms/ thread1339158.html Алгоритм Лемке-Хаусона Алгоритмы
Нужна помощь в написании программы, решающей биматричные игры методом Лемке-Хаусона. На входе - 2 матрицы выигрышей; На выходе - пары стратегий обоих игроков и соответствующие им выигрыши. Примерная схема алгоритма: http://www.imageup.ru/img273/1988955/lemke.jpg
Алгоритмы Подскажите что-нибудь написанное, на ваш взгляд, понятным и доступным языком по нормальным алгоритмам Маркова! Подскажите что-нибудь написанное, на ваш взгляд, понятным и доступным языком по нормальным алгоритмам Маркова!!!Очень нужно разобраться с этим! Заранее спасибо. https://www.cyberforum.ru/ algorithms/ thread1338638.html Алгоритмы Подскажите что-нибудь написанное, на ваш взгляд, понятным и доступным языком по машине Тьюринга!Очень нужно! https://www.cyberforum.ru/ algorithms/ thread1338637.html
Подскажите что-нибудь написанное, на ваш взгляд, понятным и доступным языком по машине Тьюринга!!!Очень нужно разобраться с этим! Заранее спасибо.
Алгоритмы Блок-схемы
не могли бы помочь нарисовать блок-схемы, хотя бы на словах(нарисовать то я и сам смогу:)) #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <math.h> int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); double sin(x), exp, x, sum, sl;
Алгоритмы Поиск в случайном бинарном дереве. Оценка алгоритма https://www.cyberforum.ru/ algorithms/ thread1337219.html
Здравствуйте! Подскажите пожалуйста, каким образом можно оценить этот алгоритм(поиск в рандомизированном бинарном дереве) в лучшем,среднем и худшем случае? И можно ли вообще? Я так понимаю, худший случай, например, для обычного бинарного дерева - это когда на вход попадают отсортированные данные. А для рандомизированного ведь это роли не играет? Может, подскажете, где можно подробнее об этом...
0 / 0 / 0
Регистрация: 26.12.2014
Сообщений: 3
0

Поиск максимального паросочетания в задаче "Испорченный паркет" - Алгоритмы - Ответ 7039647

26.12.2014, 09:48. Показов 3756. Ответов 4
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем! Прошу помощи.

Есть задача "Испорченный паркет". Условие задачи следующее:

Пол в некоторой комнате размером M ×N замощен паркетом. При этом некоторые плитки паркета оказались испорчены. Петя решил сделать ремонт в этой комнате, заменив только испорченные клетки. Придя в магазин, он обнаружил, что паркетные плитки бывают двух типов - размера 1 × 2, которые стоят A рублей (немного подумав, Петя понял, что плитки 1×2 можно поворачивать на 90 градусов, получая тем самым плитки 2×1) и размера 1 × 1, которые стоят B рублей. Разрезать плитку размера 1 × 2 на две, размера 1 × 1 Петя не может. Определите, какая минимальная сумма денег нужна Пете, чтобы сделать ремонт.

Формат ввода
Первая строка входных данных содержит 4 целых числа N, M, A, B (1 ≤ N, M ≤ 300, A, B ≤ 1000). Каждая из последующих N строк содержит по M символов. Символ «.» обозначает неиспорченную плитку паркета, а символ «*» — испорченную. В конце строк могут идти незначащие пробелы. В конце входных данных могут быть пустые строки.

Формат вывода
В выходных данных выведите одно число — минимальную сумму денег, которую необходимо будет потратить для ремонта в комнате.

Решение
Для решения я использовал алгоритм Куна для нахождения максимального паросочетания в двудольном графе: если раскрасить плитки паркета в "шахматы", то получается, что в двойной плитке (размера 1х2) одна плитка лежит на белой стороне, другая - на черной. Таким образом, испорченные плитки, которые находятся рядом можно соединить ребрами и получить двудольный граф.

Решение я написал, но оно проходит только 11 тестов, на 12-ом валится. Очевидный ответ давать не прошу. Если кто-нибудь может привести пример теста, на котором свалится решение, или направить меня в нужном направлении - помогите

Код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <iostream>
#include <vector> 
#include <cstdio>
#include <list>
#include <map>
 
std::vector<int> mt;
std::vector<char> marked;
 
 
bool visit(int vertex, std::list<int> adj) {
    if (marked[vertex]) {
        return false;
    }
 
    marked[vertex] = true;
    
    std::list<int>::iterator it;
    for (it = adj.begin(); it != adj.end(); ++it) {
        if (mt[*it] == -1) {
            mt[*it] = vertex;
            return true;
        }
    }
 
    return false;
}
 
 
int pos(int row, int column, int cols) {
    return row * cols + column;
}
 
 
int main() {
    int rows, cols, aPrice, bPrice;
    int count = 0, flow = 0;
    char ch;
    std::map <int, std::list <int> > adjacency;
    std::vector < std::vector<char> > matrix;
    
    std::cin >> rows >> cols >> aPrice >> bPrice;
    matrix.reserve(rows);
 
    int position, current;
    bool isBlack;
 
    for (int iindex = 0; iindex < rows; ++iindex) {
        for (int jindex = 0; jindex < cols; ++jindex) {
            std::cin >> ch;
            matrix[iindex].push_back(ch);
 
            if (ch == '*') {
                current = pos(iindex, jindex, cols);
                isBlack = (iindex % 2 == 0) ? (jindex % 2 == 0) : (jindex % 2 == 1);
                count++;
 
                if (jindex > 0 && matrix[iindex][jindex-1] == '*') {
                    if (isBlack)
                    {
                        position = pos(iindex, jindex - 1, cols);
                        adjacency[position].push_back(current);
                    }
                    else
                    {
                        position = pos(iindex, jindex - 1, cols);
                        adjacency[current].push_back(position);
                    }
                }
 
                if (iindex > 0 && matrix[iindex-1][jindex] == '*') {
                    if (isBlack)
                    {
                        position = pos(iindex - 1, jindex, cols);
                        adjacency[position].push_back(current);
                    }
                    else
                    {
                        position = pos(iindex - 1, jindex, cols);
                        adjacency[current].push_back(position);
                    }
                }                
            }
        }
    }
 
    if (2 * bPrice <= aPrice) {
        std::cout << count * bPrice;
        return 0;
    }
 
    int vertices = rows * cols;
    mt.assign(vertices, -1);
 
    for (auto outer = adjacency.begin(); outer != adjacency.end(); ++outer) {
        marked.assign(vertices, false);
 
        if (visit(outer->first, outer->second)) {
            flow++;
        }
    }
    
    int total = aPrice * (flow) + (count - 2 * flow) * bPrice;
    std::cout << total;
    return 0;
}


Вернуться к обсуждению:
Поиск максимального паросочетания в задаче "Испорченный паркет" Алгоритмы
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2014, 09:48
Готовые ответы и решения:

Поиск максимального паросочетания методом беллмана-форда
Помогите написать программу для поиска максимального паросочетания методом беллмана-форда. На...

Каскадная рекурсия в задаче на поиск максимального элемента в динамическом массиве
Помогите с задачей. Надо реализовать каскадную рекурсию в такой задаче: в вещественном динамическом...

Алгоритм максимального паросочетания
Двудольный граф имеет n вершин. Какое наибольшее число раз ребра графа могут поменять ориентацию в...

Алгоритм Куна для построение максимального паросочетания
Доброго времени суток. Столкнулся с такой проблемой. Нашел алгоритм Куна для явно определенно...

4
26.12.2014, 09:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2014, 09:48
Помогаю со студенческими работами здесь

Алгоритм Габова для поиска максимального паросочетания в произвольном графе за O(V^3)
Прокомментируйте каждую строку. Очень нужно. Спасибо! #include &lt;cstdio&gt; #include &lt;cstring&gt;...

Поиск совершенного паросочетания
Есть некоторая матрица смежности двудольного графа, необходимо по ней найти совершенное...

Поиск совершенных паросочетания
Здравствуйте. Есть ли алгоритм для поиска всех совершенных паросочетаний?

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

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

Поиск в задаче
Задание. Найти и заполнить в новый массив элементы массива А, значение которые не превышают...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru