Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 20

В матрице выбрать n элементов в разных строках и разных столбцах так, чтобы их сумма была минимальной

10.01.2014, 22:34. Показов 1815. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите,пожалуйста

Добавлено через 2 часа 23 минуты
примерный алгоритм как это можно сделать
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.01.2014, 22:34
Ответы с готовыми решениями:

В матрице выбрать n элементов, стоящих в разных строках и разных столбцах, чтобы их сумма была минимальной
Примерный алгоритм как можно реализовать это

В матрице переставьте строки так, чтобы сумма элементов главной диагонали была максимальна
помогите пожалуйста! осталось решить только ее! в квадратном массиве N*N переставьте строки так, чтобы сумма элементов главной...

Выбрать три различные точки на плоскости так, чтобы была минимальной разность между количествами точек
Написать программный модуль для решения следующей задачи. Выбрать три различные точки из заданного множества точек на плоскости так,...

7
25 / 25 / 12
Регистрация: 04.01.2014
Сообщений: 91
10.01.2014, 22:56
Первое что приходит в голову - перебрать все такие суммы (ну, по всевозможным перестановкам) и выбрать минимальную.

Правда, такая программа будет работать очень медленно (O(n!)).
0
 Аватар для TrueBit
100 / 100 / 47
Регистрация: 19.11.2012
Сообщений: 195
10.01.2014, 23:23
main.cpp:
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
#include <iostream>
#include <vector>
#include <set>
#include <ctime>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
 
int main() {
    vector< vector<int> > matrix;
    multiset<int> min_elements;
    int sum=0;
    int n;
    srand((unsigned int)time(NULL));
 
    cout << "n = "; cin >> n;
    // vector resize
    matrix.resize(n);
    for(vector< vector<int> >::iterator i=matrix.begin(); i!=matrix.end(); i++)
        (*i).resize(n);
 
    // fill vector rand
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++)
            matrix[i][j]=rand()%100;
 
    // print vector
    printf("Matrix: \n");
    for(int i=0; i<n; i++) {
        for(int j=0; j<n; j++)
            printf("%3d ",matrix[i][j]);
        printf("\n");
    }
 
    // fill multiset
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++) {
            if(min_elements.size() < (size_t)n)
                min_elements.insert(matrix[i][j]);
            else if(*min_elements.rbegin() > matrix[i][j]) {
                min_elements.erase(min_elements.find(*min_elements.rbegin()));
                min_elements.insert(matrix[i][j]);
            }
        }
 
    // print multiset
    printf("Minimum elements: \n");
    for(multiset<int>::iterator i=min_elements.begin(); i!=min_elements.end(); i++) {
        printf("%d ",(*i));
        sum+=(*i);
    }
    printf("\n");
 
    printf("Sum elements: %d\n", sum);
 
}
out:
Code
1
2
3
4
5
6
7
8
9
10
11
./untitled 
n = 5
Matrix: 
 67  64  74  38  69 
 84  37  77  16  18 
 46  16  58  68  76 
 11  27  55  97  76 
 88   0   5  81  22 
Minimum elements: 
0 5 11 16 16 
Sum elements: 48
0
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
10.01.2014, 23:28
TrueBit, по вашему 0 и 5 в разных строках и столбцах находятся?
0
 Аватар для TrueBit
100 / 100 / 47
Регистрация: 19.11.2012
Сообщений: 195
11.01.2014, 01:00
Цитата Сообщение от Dani Посмотреть сообщение
TrueBit, по вашему 0 и 5 в разных строках и столбцах находятся?
Извиняюсь, неправильно прочитал условие задачи.

По задаче: Я думаю тут можно использовать формулы вычисления определителей, ведь каждое слагаемое определителя по определению должно содержать элементы матрицы расположенные в различных строках и различных столбцах, и эти слагаемые вычисляются по известным формулам. То есть необязательно перебирать всю матрицу, а достаточно найти минимальное число, составленное путем суммирования элементов очередного слагаемого в формуле определителя.
0
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
11.01.2014, 01:03
Если по этой задаче организовывать перебор, то он будет похож на перебор для задачи "Расстановка n ферзей на доске n*n"
0
 Аватар для kidpoker
7 / 6 / 1
Регистрация: 02.08.2012
Сообщений: 16
11.01.2014, 01:16
Пока так получилось, нужно что-то придумать чтобы не только для N=3 работало, а для любой + выделить из полученных наименьшую, ну это просто главное первую проблему решить.

Вообще, должен быть какой то алгоритм, под чей то фамилией.

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
#include <iostream>
#include <conio.h>
using namespace std;
#define N 3
#define MAX_VALUE 1000
 
int _tmain(int argc, _TCHAR* argv[])
{
    int matrix[N][N];
 
    for(int i=0; i<N; i++){
        for(int j=0; j<N; j++){
            matrix[i][j]=rand()%MAX_VALUE;
            printf("%d ", matrix[i][j]);
        }
         
        puts("");
    }
 
    /*
    int comb=1;
    for(int i=1;i<=N;i++)
        comb*=i;*/
 
    //printf("N = %d comb = %d \n", N, comb);
    int res[N]={0}, resI=0;
 
 
    for (int i=0; i<N; i++){
        for (int j=0; j<N; j++){
            for (int k=0; k<N; k++){
                if ((i!=j)&&(j!=k)&&(i!=k)){
                    int sum=matrix[0][i]+matrix[1][j]+matrix[2][k];
                    printf("%d %d %d sum: %d\n",i,j,k,sum);
                    //res[resI]=sum;
                }
            }
        }
    }
 
    getch();
    return 0;
}
0
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
11.01.2014, 01:19
kidpoker, три цикла в коде напоминают алгоритм Флойда
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.01.2014, 01:19
Помогаю со студенческими работами здесь

Выбрать наименьшее количество чисел из набора так, чтобы их сумма была не менее M
Задача номер 1 Квадратное уравнение имеет вид: ax2 + bx + c = 0. Как известно это уравнение может иметь 1, 2 или 0 действительных...

Выбрать наименьшее количество чисел из набора так, чтобы их сумма была не менее M
Задача Набрать сумму. Задано N целых чисел. Необходимо выбрать наименьшее количество чисел из этого набора так, чтобы их сумма была не...

Выбрать диагональные элементы квадратной матрицы, так чтобы их сумма была наименьшей
Выбрать n элементов квадратной матрицы (размером n (строк) × n (столбцов), где 2\leq n\leq 6) так, чтобы : 1) нужно выбрать по...

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

Сколькими способами можно выбрать из натуральных чисел три числа так, чтобы их сумма была четной?
Сколькими способами можно выбрать из натуральных чисел от 1 до 30 три числа так, чтобы их сумма была четной?


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

Или воспользуйтесь поиском по форуму:
8
Закрытая тема Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru