Cod sursa(job #1843006)

Utilizator vlasiuflaviusVlasiu Flavius vlasiuflavius Data 7 ianuarie 2017 22:42:07
Problema Elimin Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <fstream>
#include <algorithm>
using namespace std;
ofstream fout ("elimin.out");
ifstream fin ("elimin.in");
short int v[25][7500];
int i,j,n,m,r,c,vsort[7500],sumafin,vv[25];
void suma();
void genera( int n );
int main()
{
    fin>>n>>m>>r>>c;
    if( n > m )
    {
        swap( n , m );
        swap( r , c );
        for( i = 1 ; i <= m ; i++ )
            for( j = 1 ; j <= n ; j++ )
                fin>>v[ j ][ i ];
    }
    else
    {
        for( i = 1 ; i <= n ; i++ )
            for( j = 1 ; j <= m ; j++ )
                fin>>v[ i ][ j ];
    }
    genera( n );
    fout<<sumafin;
}
void genera( int n )
{
    int cnt = 1 << n;
    for( int i = 1 ; i <= cnt ; i++ )
    {
        int poz = n;
        vv[ poz ]++;
        while( vv[ poz ] == 2 )
        {
            vv[ poz-- ] = 0;
            vv[ poz ]++;
        }
        int nr = 0;
        for( int j = 1 ; j <= n ; j++ )
            nr += vv[ j ];
        if( nr == r )
            suma();
    }
}
void suma()
{
    for( int j = 1 ; j <= m ; j++ )
        vsort[ j ] = 0;
    for( int i = 1 ; i <= n ; i++ )
        for( int j = 1 ; j <= m ; j++ )
            if( vv[ i ] == 0 )
                vsort[ j ] += v[ i ][ j ];
    sort( vsort + 1 , vsort + m + 1 );
    int sumacrt = 0;
    for( int j = c + 1 ; j <= m ; j++ )
        sumacrt += vsort[ j ];
    sumafin = max( sumafin , sumacrt );
}