Cod sursa(job #2312768)

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

using namespace std;

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

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

void Suma( )
{
    int i, j;
    int 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 );
    for ( i = m ;i > c; i-- )
        sc += VectorS[i];
    if ( sc > rez )
        rez = sc;
//        cout << sc << endl;
}

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;
//    cout <<" " << n << " " << m << " " << r << " " << c << endl;

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

//    cout <<" " << n << " " << m << " " << r << " " << c << endl;

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

    bkt ( 1 );

    out << rez;
//    cout << rez;
//
//    for ( i = 1; i <= n; i++ )
//        delete( v[i] );
//    delete ( v );

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

    return 0;
}