Cod sursa(job #2448104)

Utilizator robert.barbu27robert barbu robert.barbu27 Data 15 august 2019 18:58:17
Problema Elimin Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
using namespace std;

int a[530][20];
int sume[530];
int n, m, r, c, maxim = 0;

void citireNormal()
{
    for(int i = 0; i<n; i++)
    {
        for(int j = 0; j<m; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
}

void citireInvers()
{
    for(int i = 0; i<n; i++)
    {
        for(int j = 0; j<m; j++)
        {
            scanf("%d", &a[j][i]);
        }
    }
}

void afisare()
{
    for(int i = 0; i<n; i++)
    {
        for(int j = 0; j<m; j++)
        {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
}

void calcSumeSec(int v)
{
    int sCurr = 0;
    for(int j = 0; j<m; j++)
    {
        if(((1<<j) & v) == (1<<j))
        {
            for(int i = 0; i<n; i++)
            {
                sume[i] += a[i][j];
            }
        }
    }
    sort(sume, sume+n);
    for(int i = r; i<n; i++)
    {
        sCurr+=sume[i];
    }
    maxim = max(sCurr, maxim);
    memset(sume, 0, sizeof(sume));
}

void rez()
{
    scanf("%d %d %d %d", &n, &m, &r, &c);
    if(n >= m)
    {
        citireNormal();
    }
    else
    {
        citireInvers();
        swap(n, m);
        swap(r, c);
    }
    int nr = (1<<m);
    int unu, sCurr, aux;
    for(int v = 0; v<nr; v++)
    {
        unu = 0;
        aux = v;
        while(aux)
        {
            unu++;
            aux -= (aux&-aux);
        }
        if(unu == m-c)
        {
            calcSumeSec(v);
        }
    }
    printf("%d", maxim);
}

int main()
{
    freopen("elimin.in", "r", stdin);
    freopen("elimin.out", "w", stdout);
    rez();
    return 0;
}