Cod sursa(job #1746838)

Utilizator VladG26Ene Vlad-Mihai VladG26 Data 24 august 2016 00:04:30
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <iostream>
#include <algorithm>
#include <cstdio>
#define NR 7300
using namespace std;

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

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

        for(int i=1;i<=n;i++)
           for(int j=1;j<=m;j++){
                cin>>matriceData[j][i];
                sumaPeLinii[j]+=matriceData[j][i];
           }
    }
    swap(n,m);
        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];
        }
    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;
}