Форум программистов, компьютерный форум CyberForum.ru

Поиск максимальной последовательности в другой последовательности - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ whar_t char http://www.cyberforum.ru/cpp-beginners/thread342837.html
whar_t и char перевод из одног типа в другой и обратно и обратно?
C++ char *s или char s[] char s1="1111",s2="2222"; printf("%s %s\n",s1,s2); memmove(s1,s2,2); printf("%s %s\n",s1,s2); работает нормально char *s1="1111",*s2="2222"; printf("%s %s\n",s1,s2); memmove(s1,s2,2); printf("%s %s\n",s1,s2); компилируется с предупреждением http://www.cyberforum.ru/cpp-beginners/thread342836.html
Подскажите книжку по динамическому программированию. C++
Доброго времени суток! Наткнулся на такое понятие, как динамическое программирование, горю желанием узнать больше. Пожалуйста, подскажите литературу по динамическому программированию, только для программистов, а не для математиков.
Конструктор копировщик C++
Самостоятельно изучаю С++ по Либерти(освой за 21 день) Требуется создать класс и конструктор копировщик. Компилятор Visual C++ 2010. Выдает ошибку: 1>c:\users\selver\documents\visual studio 2010\projects\bufer\bufer\hgfh.cpp(42): error C2662: 'SimpleCircle::GetRadius' : cannot convert 'this' pointer from 'const SimpleCircle' to 'SimpleCircle &' Хотя в книге написано что должно работать....
C++ Создание вложенной папки (Directory) http://www.cyberforum.ru/cpp-beginners/thread342790.html
Добрый день, появилась необходимость создать вложенную папку в среде windows XP нашел тока #include <windows.h> CreateDirectory((LPCTSTR)"c:\\new",NULL); // но данный код не работает почему-то, к тому же я так понял проблема с преоразованием в LPCTSTR из char* или string у меня есть путь в переменной std::string path = "C:\\test\01\01"; , приэтом папки C:\\test еще нету, необходимо...
C++ Разложение числа на слагаемые Разложение числа на слагаемые - используется во многих задачах (как мне кажется - это тривиальная задача). И мне стало интересно: какой самый быстрый алгоритм разложения числа на слагаемые вы предложите? Думаю, максимальный тест n<=50. З.Ы. Проверю на время сам. И разложения должны быть без повторений (перестановка слагаемых не дает новых разложений) и чтоб строка слагаемых выводилась в файл... подробнее

Показать сообщение отдельно
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
17.08.2011, 21:51  [ТС]     Поиск максимальной последовательности в другой последовательности
Не пойдет, числа должны идти последовательно, т.е. исключать элементы посреди последовательности нельзя.

Добавлено через 37 минут
Сдал через быдлоперебор, по идее асимптотика должна быть O(n * n * logn * m) в худшем случае(когда вся матрица из единиц).
Краткая идея решения задачи по ссылке в первом посте - в комментариях.
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
/*Найти в матрице nхm, состоящую из нулей и единиц, максимальную по площади подматрицу, состоящую только из единиц. */
 
#include <iostream>
#include <vector>
#include <algorithm>
 
/* Поиск наибольшей последовательности в векторе, произведение 
 * минимального элемента и количества элементов которой максимально. 
 */
int max_mult(const std::vector<int>& arr){
    
    int res = 0;
    
    for (size_t i = 0; i < arr.size(); ++i)
    {
        if (arr[i] == 0)
            continue;
        for (int j = i, len = 1, min = arr[i]; j < (int) arr.size(); ++j, ++len)
        {
            if (arr[j] == 0)
                break;
                
            min = std::min(min, arr[j]);
            res = std::max(res, min * len);
        }
    }
    return res; 
}
 
int main(){
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    int n, m;
    std::cin >> n >> m;
    std::vector< std::vector<int> > matrix(n, std::vector<int> (m) );
    int ans = 0;
    for (size_t i = 0; i < matrix.size(); ++i)
    {
        /* В элементе matrix[i][j] будет хранится количество
         * последовательных единиц находится выше этого элемента, 
         * включая этот элемент
         */
        for (size_t j = 0; j < matrix[0].size(); ++j)
        {
            char ch;
            std::cin >> ch;
            
            switch( ch )
            {
                case '0' :
                    matrix[i][j] = 0;
                    break;
                case '1':
                    if ( i )
                        matrix[i][j] = matrix[i-1][j] + 1;
                    else
                        matrix[i][j] = 1;
                    break;
                default:
                    std::cerr << "Incorrect input!\n";
                    return 1;               
            }
        }
        /* Для каждой строки находим максимальную по площади подматрицу,
         * нижняя сторона которой лежит в строке i
         */
        ans = std::max(ans, max_mult(matrix[i]) );  
    }   
    
    std::cout << ans;
}
Спасибо всем, кто откликнулся.
 
Текущее время: 22:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru