0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 12
1

В заданной матрице найти максимальную сумму элементов прямоугольной подматрицы среди всех возможных подматриц

04.02.2017, 10:31. Показов 5379. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дан массив A[N,M]. Необходимо найти с помощью функции максимальную сумму элементов прямоугольного подмассива по всем возможным прямоугольным подмассивам.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.02.2017, 10:31
Ответы с готовыми решениями:

Найти максимальную сумму элементов подматрицы и элемент ее образующий
Задача: Дана квадратная целочисленная матрица А. Каждый элемент этой матрицы образует...

Нахождение в прямоугольной матрице номера строки, имеющей максимальную сумму элементов
Написать и протестировать функцию для нахождения в прямоугольной матрице номера строки, имеющей...

Нахождение в прямоугольной матрице номера строки, имеющей максимальную сумму элементов
Написать и протестировать функцию для нахождения в прямоугольной матрице номера строки, имеющей...

Нахождение в прямоугольной матрице номера строки, имеющей максимальную сумму элементов
Написать и протестировать функцию для нахождения в прямоугольной матрице номера строки, имеющей...

8
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
04.02.2017, 11:17 2
А размеры подмассива чему равны?
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
04.02.2017, 11:29 3
Цитата Сообщение от likehood Посмотреть сообщение
А размеры подмассива чему равны?
likehood, среди всех возможных. Например. Задана матрица размером 3х4. Значит надо проверить подматрицы размером в один элемент, размером 1х2, 2х1, 2х2, 2х3, 3х2, 3х3, 3х4, 4х3, 4х4.
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
04.02.2017, 11:33 4
gru74ik, точно, я что-то затупил.
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
04.02.2017, 11:34 5
likehood, очевидно, что сумма элементов подматрицы, которая равна заданной матрице, будет максимальной. Значит выбросим её из рассмотрения. Иначе задача сводится к тривиальному выводу на экран размера исходной матрицы.
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
04.02.2017, 11:39 6
likehood, вот, скажем, задана такая матрица:

34 56 11 22 15
45 10 24 99 98
66 79 13 55 10
12 13 12 11 10
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
04.02.2017, 11:45 7
likehood, очевидно, что у нас может получиться две подматрицы размером (N-1)*M и две подматрицы размером N*(M-1). И очевидно также, что именно сумма значений элементов одной из этих четырёх подматриц и будет ответом задачи.
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
04.02.2017, 11:58 8
Цитата Сообщение от gru74ik Посмотреть сообщение
очевидно, что сумма элементов подматрицы, которая равна заданной матрице, будет максимально
Я тоже сначала так подумал. Но возможна ситуация, когда по периметру матрицы стоят отрицательные числа, а внутри - положительные. Тогда искомой будет подматрица, полученная из исходной за вычетом периметра.

Добавлено через 31 секунду
Вот мой вариант решения:
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
#include <ctime>
#include <cstdlib>
#include <iostream>
#include <iomanip>
 
using namespace std;
 
const size_t NRow = 5, NCol = 7;
 
int a[NRow][NCol];
 
bool subMatrixSum(size_t i0, size_t j0, size_t n, size_t m, int &sum)
{
    if (i0+n > NRow || j0+m > NCol) return false;
 
    sum = 0;
    for (size_t i = i0; i < i0+n; i++)
        for (size_t j = j0; j < j0+m; j++)
            sum += a[i][j];
 
    return true;
}
 
void printSubmatrix(size_t i0, size_t j0, size_t n, size_t m)
{
    for (size_t i = i0; i < i0+n; i++)
    {
        for (size_t j = j0; j < j0+m; j++)
            cout << setw(3) << a[i][j] << ' ';
        cout << '\n';
    }
}
 
int main()
{
    srand(time(NULL));
    for (size_t i=0; i<NRow; i++)
        for (size_t j=0; j<NCol; j++)
            a[i][j] = -50 + rand() % 100;
 
    cout << "Generated matrix:\n";
    printSubmatrix(0, 0, NRow, NCol);
 
    size_t iMax=0, jMax=0, nMax=1, mMax=1;
    int sMax=a[0][0];
 
    for (size_t n=1; n<=NRow; n++)
        for (size_t m=1; m<=NCol; m++)
            for (size_t i=0; i<NRow; i++)
                for (size_t j=0; j<NCol; j++)
                {
                    int s;
                    bool fit = subMatrixSum(i, j, n, m, s);
                    if (fit && s > sMax)
                    {
                        iMax = i;
                        jMax = j;
                        nMax = n;
                        mMax = m;
                        sMax = s;
                    }
                }
 
    cout << "\nSubMatrix geometry: { (" << iMax << ", " << jMax << "), "
         << nMax << "x" << mMax << " }\n";
    cout << "Element sum: " << sMax << endl;
    cout << "\nSubmatrix:\n";
    printSubmatrix(iMax, jMax, nMax, mMax);
}
1
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
04.02.2017, 12:09 9
Цитата Сообщение от likehood Посмотреть сообщение
Но возможна ситуация, когда по периметру матрицы стоят отрицательные числа, а внутри - положительные.
Хм... об этом я как-то не подумал. Это в корне меняет дело!
0
04.02.2017, 12:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.02.2017, 12:09
Помогаю со студенческими работами здесь

Нахождение в прямоугольной матрице номера строки, имеющей максимальную сумму элементов
Написать и протестировать функцию для нахождения в прямоугольной матрице номера строки, имеющей...

Функция для нахождения в прямоугольной матрице номера строки, имеющей максимальную сумму элементов
Всем доброго времени суток! Помогите пожалуйста с заданием в котором нужно создать функцию для...

В заданной матрице найти сумму элементов указанных строк и минимум среди сумм элементов заданных диагоналей
Дана целочисленная квадратная матрица. Определить: сумму элементов в тех строках, которые не...

В заданной квадратной матрице найти сумму всех элементов и максимальный элемент
помогите, пожалуйста


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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