Cod sursa(job #1642032)

Utilizator tudorgalatanRoman Tudor tudorgalatan Data 9 martie 2016 12:17:18
Problema Elimin Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <bits/stdc++.h>

using namespace std;

int suma_matrice, s_linie[7300], s_coloana[20];
int n, m, r, c, a[7300][20];
int suma_coloane, suma_linii;

void Citire()
{
    int i, j;
    ifstream fin("elimin.in");
    fin >> n >> m >> r >> c;
    if(n > m)
    {
        for(i = 1; i <= n; i++)
           for(j = 1; j <= m; j++)
              fin >> a[i][j];
    }
    else
    {
         for(i = 1; i <= n; i++)
           for(j = 1; j <= m; j++)
                fin >> a[j][i];
         swap(n, m);
         swap(r, c);
    }
}

void Precalculari()
{
    int i, j;
    suma_matrice = 0;
    for(i = 1; i <= n; i++)
        for(j = 1; j <= m; j++)
        {
            suma_matrice += a[i][j];
            s_coloana[j] += a[i][j];
        }
}

void Generare()
{
    int q, nr, nr_col, sol = 0, i, j;
    nr = (1 << m);
    for (q = 0; q < nr; q++)
    {
        nr_col=0;
        for(j = 0; j < m; j++)
            if(q & (1<<j))
                nr_col++;
        if(nr_col == c)
        {
            suma_coloane = 0;
            suma_linii = 0;
            for(i = 1; i <= n; i++)
                s_linie[i] = 0;
            for (i = 1; i <= n; i++)
                for (j = 1; j <= m; j++)
                    if (q & (1 << (j - 1)))
                        suma_coloane += a[i][j];
                    else
                        s_linie[i] += a[i][j];
            sort(s_linie+1, s_linie+n+1);
            for (i=1; i<=r; i++)
                suma_linii += s_linie[i];
            if (suma_matrice-suma_coloane-suma_linii > sol)
                sol = suma_matrice - suma_coloane - suma_linii;
        }
    }
    ofstream fout("elimin.out");
    fout<< sol << "\n";
}

int main()
{
    Citire();
    Precalculari();
    Generare();
    return 0;
}