Cod sursa(job #2561136)

Utilizator Alex_AeleneiAlex Aelenei Ioan Alex_Aelenei Data 28 februarie 2020 16:59:32
Problema Elimin Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <vector>
#include <fstream>
#include <iostream>
#include <algorithm>

using namespace std;

const int NMAX = 7294 ;
vector < int > a [ NMAX + 5 ] ;
int n , m , r , c , ans , v [ NMAX + 5 ] ;
int config [ 20 ] , tot ;

int getans ( void )
{
    int i , j , ans = 0 ;

    for ( j = 1 ; j <= m ; ++ j )
        v [ j ] = 0 ;

    for ( i = 1 ; i <= n ; ++ i )
        if ( ! config [ i ] )
            for ( j = 1 ; j <= m ; ++ j )
                v [ j ] += a [ i ] [ j ] ;

    sort ( v + 1 , v + m + 1 ) ;

    for ( j = c + 1 ; j <= m ; ++ j )
        ans += v [ j ] ;
    return ans ;
}

void backt ( int poz )
{
    if ( tot == r )
    {
        ans = max ( ans , getans () ) ;
        return ;
    }

    if ( poz == n + 1 )
        return ;

    config [ poz ] = 1 ; ++ tot ;
    backt ( poz + 1 ) ;

    -- tot ; config [ poz ] = 0 ;
    backt ( poz + 1 ) ;
}

int main()
{
    ifstream in ( "elimin.in" ) ;
    ofstream out ( "elimin.out" ) ;

    int i , j ;

    in >> n >> m >> r >> c ;

    if ( n < m )
    {
        for ( i = 1 ; i <= n ; ++ i )
            a [ i ].assign ( m + 5 , 0 ) ;

        for ( i = 1  ; i <= n ; ++ i )
            for ( j = 1 ; j <= m ; ++ j )
                in >> a [ i ] [ j ] ;
    }
    else
    {
        for ( i = 1 ; i <= m ; ++ i )
            a [ i ].assign ( n + 5 , 0 ) ;

        for ( i = 1 ; i <= n ; ++ i )
            for ( j = 1 ; j <= m ; ++ j )
                in >> a [ j ] [ i ] ;

        swap ( n , m ) ;
    }

    backt ( 1 ) ;

    out << ans ;
    return 0;
}