Cod sursa(job #2312746)

Utilizator miruna1224Floroiu Miruna miruna1224 Data 5 ianuarie 2019 14:27:46
Problema Elimin Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

const int N = 5005;
int m, n, r, c, sc, rez;
//int **v, *VectorS, *sol;
int v[N][N], sol[N],  VectorS[N];

bool cmp ( int a, int b)
{
    if ( a <= b )
        return true;
    return false;
}

void Suma( )
{
    int i, j;
    sc = 0;
    for ( i = 1; i <= m; i++ )
        VectorS[i] = 0;
    for ( i = 1; i <= n - r; i++)
        for ( j = 1; j <= m; j++ )
            VectorS[j] += v[sol[i]][j];
    sort( VectorS + 1, VectorS + m + 1, cmp);
    for ( i = m ;i > c; i-- )
        sc += VectorS[i];
    if ( sc > rez )
        rez = sc;
}

void bkt ( int k )
{
    int i;
    for ( i = sol[k - 1] + 1 ; i <= n; i++ )
    {
        sol[k] = i;
        if( k == n - r )
            Suma();
        else bkt( k + 1 );
    }
}

int main()
{
    int i, j;

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

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

    if (n > m)
    {
        n = n + m;
        m = n - m;
        n = n - m;
        r = r + c;
        c = r - c;
        r = r - c;
    }

//    v = new int * [n + 1];
//    VectorS = new int [n + 1];
//    sol = new int [n + 1];
//    for ( i = 1; i <= n; i++)
//    {
//        v[i] = new int [m + 1];
//        for ( j = 1; j <= m; j++ )
//            in >> v[i][j];
//    }

    bkt ( 1 );

    out << rez;

//    for ( i = 1; i <= n; i++ )
//        delete( v[i] );
//    delete ( v );
//    delete ( VectorS );
//    delete ( sol );

    in.close();
    out.close();

    return 0;
}