Cod sursa(job #1005762)

Utilizator DorelBarbuBarbu Dorel DorelBarbu Data 5 octombrie 2013 18:54:14
Problema Elimin Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.92 kb
#include <iostream>
#include <cstdio>
#define MAX_LG 30
#include <algorithm>
using namespace std;

int n, m, r, c, a[MAX_LG][MAX_LG], sume_linii[MAX_LG], sume_coloane[MAX_LG], s_total, com[MAX_LG];

void citire()
{
    freopen("elimin.in","r",stdin);

    int i, j, s = 0;
    scanf("%d %d %d %d", &n, &m, &r, &c);
    for( i = 1 ; i <= n ; i++ )
    {
        s = 0 ;
        for( j = 1 ; j <= m ; j++ )
        {
            scanf("%d", &a[i][j]);
            s += a[i][j] ;
            s_total += a[i][j] ;
        }
        sume_linii[i] = s ;
    }

}

void calculeaza_sume_coloane()
{
    int i, j, s = 0;
    for( j = 1 ; j <= m ; j++ )
    {
        s = 0 ;
        for( i = 1 ; i <= n ; i++ )
        {
            s += a[i][j] ;
        }
        sume_coloane[j] = s ;
    }
}
int elimin(int s_total)
{
    int i ,j , v[MAX_LG], k = 0 , aux ;

    //elimin coloanele
    for( i = 1 ; i <= c ; i++ )
    {
        s_total -= sume_coloane[com[i]] ;
    }

    //calculez noile sume de pe linii
    //si le pun in vectorul v ;

    for( i = 1 ; i <= n ; i++ )
    {
        aux = sume_linii[i] ;
        for( j = 1 ; j <= c ; j++ )
        {
            aux = aux - a[i][com[j]] ;
        }

        v[++k] = aux ;
    }

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

    //elmin primele r linii

    for( i = 1 ; i <= r ; i++ )
    {
        s_total -= v[i] ;
    }

    return s_total ;
}

int s_max = 0 ;

void back( int k , int c )
{
    if( k == c + 1 )
    {
        int aux = elimin(s_total) ;
        s_max = max(aux,s_max) ;
    }
    else
    {
        int i ;
        for( i = com[k-1] + 1 ; i <= m-c+k ; i++ )
        {
            com[k] = i ;
            back(k+1,c) ;
        }
    }
}
void scrie()
{
    freopen("elimin.out", "w", stdout);
    printf("%d" , s_max ) ;
}
int main()
{
    citire();
    calculeaza_sume_coloane();
    back(1,c);
    scrie() ;
}