Cod sursa(job #1012243)

Utilizator vladm97Matei Vlad vladm97 Data 18 octombrie 2013 15:59:55
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.47 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define sz 700
#define infinit 1<<31
#define verf ++poz == hg ? in.read (ch, hg), poz = 0 : 0

using namespace std;

const char *FIN = "elimin.in", *FOU = "elimin.out";
const int MAX = 500001, hg = 1 << 13;

ifstream in (FIN);
ofstream out (FOU);

char ch[hg];
int poz;

void cit ( int &x ) {
    if (ch[0] == '\0')
    {
       in.read (ch, hg);
    }
    else
    {
        for (; ch[poz] < '0' || ch[poz] > '9' ; verf) ;
    }
    for (x = 0 ; ch[poz] >= '0' && ch[poz] <= '9' ; x = x * 10 + ch[poz] - '0', verf) ;
}

int matrix[sz][sz];
int sline[sz],sMax=(-1)*infinit,slinesec[sz];
bool include[sz];
int n,m,r,c,smatrix=0;

void read()
{
    int aux;
    cit(n);
    cit(m);
    cit(r);
    cit(c);

    if(n<m)
    {
        for(int i=1; i<=n ; i++)
        {
            for(int j=1 ; j<=m ; j++)
            {
                cit(aux);
                matrix[j][i]=aux;
                slinesec[i]+=matrix[i][j];
            }
        }
        swap(n,m);
        swap(r,c);
    }
    else
    {
        for(int i=1 ; i<=n ; i++)
        {
            for(int j=1; j<=m ; j++)
            {
                cit(aux);
                matrix[i][j]=aux;
                slinesec[i]+=matrix[i][j];
            }
        }
    }
}
void bk()
{
    int b=1;
    for(int i=0; i < (1<<m) ; i++)
    {
        int bytes=0;
        for(int j=0; (1<<j)<=i && bytes<=c+1;j++)
        {
            if( ((1<<j)&i) != 0)
            {
                include[j+1]=1;
                bytes++;
            }
            else
            {
                include[j+1]=0;
            }
        }
        if(bytes==c)
        {

            for(int i=1;i<=n;i++)
            {
                sline[i]=slinesec[i];'

                for(int j=1;j<=m;j++)
                {
                    if(include[j]==1)
                    {
                        sline[i]-=matrix[i][j];
                        int x;
                        cin>>x;
                    }
                }
            }
            sort(sline + 1  , sline + n + 1);

            int sum=0;
            for(int i=r+1;i<=n;i++)
            {
                sum=sum+sline[i];
            }
            if(sum>sMax)
            {
                sMax=sum;
            }
        }
    }
}

void write()
{
    out<<sMax;
}

int main()
{
    read();
    bk();
    write();
}