Cod sursa(job #2765713)

Utilizator DragosC1Dragos DragosC1 Data 29 iulie 2021 17:33:33
Problema Elimin Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <fstream>
#include <algorithm>
using namespace std;
 
short a[16][7295];
short n, m, R, C;
 
void read() {
    int i, j;
    ifstream f("elimin.in");
    f >> n >> m >> R >> C;
    if (n > m) {
        for (i = 1; i <= n; i++)
            for (j = 1; j <= m; j++)
                f >> a[j][i];
        swap(n, m), swap(R, C);
    }
    else {
        for (i = 1; i <= n; i++)
            for (j = 1; j <= m; j++)
                f >> a[i][j];
    }
    f.close();
}
 
int Maxsum;
short comb[16];
int v[7295];
 
void solutie() {
    int i, sum = 0, j, aux;
 
    bool elim[16] = {0};
    for (i = 1; i <= R; i++) 
        elim[comb[i]] = 1;
 
    for (j = 1; j <= m; j++) {
        aux = 0;
        for (i = 1; i <= n; i++) 
            if (!elim[i]) {
                aux += a[i][j];
                sum += a[i][j];
            }
        v[j] = aux;
    }
 
    sort(v + 1, v + m + 1);
 
    for (i = 1; i <= C; i++)
        sum -= v[i];

    Maxsum = (sum > Maxsum ? sum : Maxsum);
}
 
void back(int k) {
    for (int i = comb[k - 1] + 1; i <= n + k - R; i++) {
        comb[k] = i;
        if (k < R)
            back(k + 1);
        else solutie();
    }
}
 
void output() {
    ofstream g("elimin.out");
    g << Maxsum;
    g.close();
}
 
int main() {
    read();
    back(1);
    output();
    return 0;
}