Cod sursa(job #1746857)

Utilizator VladG26Ene Vlad-Mihai VladG26 Data 24 august 2016 01:18:35
Problema Elimin Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <iostream>
#include <algorithm>
#include <cstdio>

using namespace std;

int sumaPeColoana[7400],matriceData[20][7400],vectorCombinari[7400],m,n,r,c,sumaMaxima;

void citireDateIntrare()
{
    cin>>m>>n>>r>>c;
    if(m<=n)
        for(int i=1; i<=m; i++)
            for(int j=1; j<=n; j++)
                cin>>matriceData[i][j];
    else
    {
        for(int i=1; i<=m; i++)
            for(int j=1; j<=n; j++)
                cin>>matriceData[j][i];
        swap(m,n);
        swap(r,c);
    }
}

void determinareSuma()
{
    int sumaProvizorie=0;
    for(int j=1; j<=n; j++)
        sumaPeColoana[j]=0;

    for(int j=1; j<=n; j++)
    {
        for(int i=1; i<=m-r; i++)
            sumaPeColoana[j]+=matriceData[vectorCombinari[i]][j];
        sumaProvizorie+=sumaPeColoana[j];
    }

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

    for(int i=1; i<=c; i++)
        sumaProvizorie-=sumaPeColoana[i];

    if(sumaMaxima<sumaProvizorie)
        sumaMaxima=sumaProvizorie;
}

void generareCombinari(int x)
{
    if(x==m-r+1)
    {
        determinareSuma();
        return;
    }
    for(int i=vectorCombinari[x-1]+1; i<=n; i++)
    {
        vectorCombinari[x]=i;
        generareCombinari(x+1);
    }
}
int main()
{
    freopen("elimin.in","r",stdin);
    freopen("elimin.out","w",stdout);
    citireDateIntrare();
    generareCombinari(1);
    cout<<sumaMaxima;
    return 0;
}