Cod sursa(job #1746828)

Utilizator VladG26Ene Vlad-Mihai VladG26 Data 23 august 2016 23:39:06
Problema Elimin Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;

int sumaPeColoana[8000],sumaPeLinii[8000],matriceData[8000][8000],vectorCombinari[8000],m,n,r,c,sumaMaxima;

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

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];
        }
    for(int i=1; i<=m-r; i++)
        sumaProvizorie+=sumaPeLinii[vectorCombinari[i]];
    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-(m-r)+x; 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;
}