Cod sursa(job #2236390)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 29 august 2018 13:56:39
Problema Elimin Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <fstream>
#include <algorithm>
#include <vector>
#define DIM 7300
using namespace std;

ifstream fin ("elimin.in");
ofstream fout ("elimin.out");
int n,m,i,j,s,mini,nr,l,c,sl[DIM],sc[DIM],x[DIM];
vector <int> L[DIM],a[DIM];

void back (int pas){
    if (pas > c){

        for (int i=1;i<=n;i++){
            sl[i] = 0;
            for (int j=1;j<=m;j++)
                sl[i] += a[i][j];
        }
        for (int j=1;j<=c;j++)
            for (int i=1;i<=n;i++)
                sl[i] -= a[i][x[j]];
        sort (sl+1,sl+n+1);
        int sum = 0;
        for (int i=1;i<=l;i++)
            sum += sl[i];
        for (int i=1;i<=c;i++)
            sum += sc[x[i]];
        mini = min (mini,sum);
        return;
    }
    for (int i=1;i<=m;i++){
        x[pas] = i;
        if (x[pas] > x[pas-1])
            back (pas+1);
    }

}
int main (){

    fin>>n>>m>>l>>c;
    for (i=1;i<=n;i++){
        L[i].push_back (0);
        for (j=1;j<=m;j++){
            fin>>nr;
            L[i].push_back (nr);
            s += nr;
        }
    }

    if (n < m){
        /// interschimbam matricea
        for (i=1;i<=m;i++)
            for (j=0;j<=n;j++)
                a[i].push_back (0);
        for (i=1;i<=n;i++)
            for (j=1;j<=m;j++)
                a[m-j+1][i] = L[i][j];

        swap (n,m);
        swap (l,c);
    }
    else{
        for (i=1;i<=n;i++){
            a[i].push_back (0);
            for (j=1;j<=m;j++)
                a[i].push_back (L[i][j]);
        }
    }

    /// facem sume partiale pe linii si pe coloane

    for (j=1;j<=m;j++)
        for (i=1;i<=n;i++)
            sc[j] += a[i][j];
    mini = 2000000000;
    back (1);
    fout<<s - mini;

    return 0;
}