Cod sursa(job #1073268)

Utilizator ioalexno1Alexandru Bunget ioalexno1 Data 5 ianuarie 2014 21:22:07
Problema Elimin Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 kb
#include <fstream>
#include <algorithm>


using namespace std;

const int MAX_N = 7300, MAX_C = 20;
int a[MAX_N][MAX_C], st[MAX_C], sum[MAX_C];
bool viz[MAX_C];

inline int max( int x, int y ){

    if( x > y ) return x;
    return y;
}

int main(){

    int M, N, R, C;

    ifstream cin( "elimin.in" );
    cin >> M >> N >> R >> C;
    if( M < N ){

        for( int i = 1; i <= M; ++i )
            for( int j = 1; j <= N; ++j ){

                cin >> a[j][i];
                sum[j] += a[j][i];
                }
        M = M + N - ( N = M );
        R = R + C - ( C = R );
        }
    else
        for( int i = 1; i <= M; ++i )
            for( int j = 1; j <= N; ++j ){

                cin >> a[i][j];
                sum[i] += a[i][j];
                }
    cin.close();

    int k = 1, ans = 0, curr = 0;
    st[1] = -1;
    while( k > 0 ){

        bool as = false;
        if( st[k] == - 1 ){

            st[k] = 0;
            as = true;
            }
        else if( st[k] == 0 ){

            if( curr < C ){

                st[k] = 1;
                as = true;
                ++curr;
                }
            }
        if( as ){

            if( k < N ) st[++k] = -1;
            else if( curr == C ){

                int aux[MAX_C];
                for( int j = 1; j <= M; ++j ){

                    aux[j] = sum[j];
                    for( int i = 1; i <= k; ++i )
                        aux[j] -= st[i] * a[j][i];
                    }
                sort( aux + 1, aux + M + 1 );
                int x = 0;
                for( int i = M; i > R; --i )
                    x += aux[i];
                ans = max( ans, x );
            }
        }
        else {

            if( st[k] ) --curr;
            --k;
            }

        }
    ofstream cout( "elimin.out" );

    cout << ans;
    cout.close();
    return 0;
}