Не получается довести до ума задачу по программированию на языке си

Нашел задачу которая у меня вызвала затруднение. Есть какие-то идеи но мне кажется что они не верные. Хочется разобраться в этой задаче и добавить ее в свою копилку.

Вот сама задача:

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

  1. Задача о куче камней. Имеется N камней, известны их веса Pi (i=1...N), задано количество куч M. Требуется разложить камни на M куч так, чтобы минимизировать вес самой тяжелой кучи. (Вариант формулировки: даны N программ с длительностями Pi и M процессоров. Требуется распределить программы так, чтобы раньше закончить выполнение).

итак мне пришла идея найти считать с файла M и N и двумерный массив линия это кучи , а столбы вес Далее в функции я находил находил наибольшую и наименьшую кучу и номер позиции где стоит число. А дальше уже проблематично сделать. Есть что менять местами числа но это будет не полная переборка. Я чет запутался и не знаю как дальше сделать.

Вот код, что получилось

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#define MAX_VERTICES 200




int N=0, M=0;
int matrix[MAX_VERTICES][MAX_VERTICES];


void findMaxSet()
{
    
    int cym[MAX_VERTICES] = {0};
    int maxcol = 0;
    int mincol;
    int elemmax= 0;
    int elemmin = 0;
    int i2 = 0, j2 = 0;

  
    while (j2 <= M) {
        while (i2 <= N) {
            cym[j2] = cym[j2] + matrix[i2][j2];
            i2++;

        }
        j2++;
        i2 = 0;
       
        

        
    }
    for (int i = 0; i < M; i++) {
        if (maxcol < cym[i]) {
            maxcol = cym[i]; }
        elemmax = i;
 }
    mincol = maxcol;
    for (int i = 0; i < M; i++) {
        if (mincol > cym[i]) {
            mincol = cym[i];
            elemmin = i;
        }
    }
    sort();
}
void sort() {


}

int main()
{

    FILE* f = fopen("input.txt", "r");
    fscanf_s(f, "%d %d", &N,&M); 
        for (int с = 0; с < N; с++) {
            for (int сс = 0; сс < M; сс++) {
                fscanf_s(f, "%d,", &matrix[с][сс]);
            }
        }
    clock_t begin = clock();
        findMaxSet(); 
      
        clock_t end = clock();
 

    return 0;
}

Ответы (0 шт):