Cod sursa(job #1145648)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 18 martie 2014 12:52:19
Problema Elimin Scor 10
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.28 kb
#include<fstream>
#include<algorithm>
#define NMAX 1010

using namespace std;

ifstream f("elimin.in");
ofstream g("elimin.out");

int n, m, R, C, mx=0, a[NMAX][NMAX], b[NMAX][20], suml[NMAX], x[20];

void Transpune()
{
    int i, j;

    for (i=1; i<=n; ++i)
        for (j=1; j<=m; ++j)
        {
            b[j][i]=a[i][j];
            a[i][j]=0;
        }
    swap(m, n); swap(R, C);
    for (i=1; i<=n; ++i)
        for (j=1; j<=m; ++j)
            a[i][j]=b[i][j];
}

void Citeste()
{
    int i, j;
    f>>n>>m>>R>>C;
    for (i=1; i<=n; ++i)
        for (j=1; j<=m; ++j) f>>a[i][j];
    if (n<m) Transpune();
}

void Vezi()
{
    int i, j, p=1, sum=0;

    for (i=1; i<=n; ++i) suml[i]=0;

    for (j=1; j<=m; ++j)
        if (j==x[p]) ++p;
        else
        {
            for(i=1; i<=n; ++i)
                suml[i]=suml[i]+a[i][j];
        }

    sort(suml+1, suml+n+1);

    for (i=R+1; i<=n; ++i) sum+=suml[i];

    mx=max(sum, mx);
}

void Back(int h)
{
    int i;

    if (h==C+1) Vezi();
    else
        for (i=x[h-1]+1; i<=n-R+h; ++i)
        {
            x[h]=i;
            Back(h+1);
        }
}

int main()
{
    Citeste();

    Back(1);

    g<<mx<<"\n";

    f.close();
    g.close();
    return 0;
}