Cod sursa(job #1065898)

Utilizator jul123Iulia Duta jul123 Data 23 decembrie 2013 19:59:56
Problema Elimin Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.77 kb
#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;

int a[16][7300], st[20], v[7300];
int main()
{
    FILE *fin, *fout;
    fin=fopen("elimin.in", "r");
    fout=fopen("elimin.out", "w");

    int n, m, c, r, i, j, k, s, maxim=0, x, nr, S=0, aux;
    fscanf(fin, "%d %d %d %d", &n, &m, &c, &r);
    if(m<n)
    {
        aux=c;
        c=r;
        r=aux;
    for(i=0; i<n; i++)
        for(j=0; j<m; j++)
            {
                fscanf(fin, "%d", &a[j][i]);
                S+=a[j][i];
            }
        aux=m;
        m=n;
        n=aux;
    }
    else{
        for(i=0; i<n; i++)
            for(j=0; j<m; j++)
            {
                fscanf(fin, "%d", &a[i][j]);
                S+=a[i][j];
            }
    }
        for(i=0; i<(1<<n); i++)
        {
        x=i;
            s=0;
            nr=0;
            int ok=1;
            for(j=0; j<n && ok==1; j++)
                {
                    st[j]=((x>>j)&1);
                    if(st[j]==0)
                        {for(k=0; k<m; k++)
                            s+=a[j][k];
                        nr++;
                    if(nr>r)
                        ok=0;
                    if((nr+(n-j))<r)
                        ok=0;
                        }

                }
            if(nr==r)
            {
            for(j=0; j<m; j++)
                v[j]=0;
            for(j=0; j<m; j++)
            {
                for(k=0; k<n; k++)
                    if(st[k]==1)
                        v[j]+=a[k][j];
            }
            sort(v, v+m);
            for(j=0; j<c; j++)
                s+=v[j];
            if((S-s)>maxim)
                maxim=S-s;
        }
    }
        fprintf(fout, "%d", maxim);
}