Cod sursa(job #2034939)

Utilizator ruxi.icleanuRuxandra Icleanu ruxi.icleanu Data 8 octombrie 2017 17:49:06
Problema Elimin Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <algorithm>

using namespace std;

#define MAXN 15
#define MAXM 7295

int a[MAXN][MAXM], aux_a[MAXM][MAXN];
int sumlin[MAXM], scad[MAXM];

inline int nrbiti1(int x) {
    int nr=0;
    while(x>0) {
        x=x&(x-1);
        nr++;
    }
    return nr;
}

int main()
{
    int n, m, r, c, i, j, nr, lin, col, sum, maxs, aux;

    FILE *fi, *fo;
    fi = fopen("elimin.in", "r");
    fo = fopen("elimin.out", "w");

    fscanf(fi, "%d%d%d%d", &n, &m, &r, &c);
    if(n>m) {
        for(i=0; i<n; i++)
            for(j=0; j<m; j++)
                fscanf(fi, "%d", &aux_a[i][j]);
        aux=n;
        n=m;
        m=aux;
        for(i=0; i<n; i++)
            for(j=0; j<m; j++)
                a[i][j]=aux_a[j][m-i-1];
        aux=r;
        r=c;
        c=aux;
    }
    for(i=0; i<n; i++)
        for(j=0; j<m; j++) {
            fscanf(fi, "%d", &a[i][j]);
            sumlin[i]+=a[i][j];
        }
    nr=1<<m;
    maxs=-32000*7294;
    for(i=0; i<nr; i++)
        if(nrbiti1(i)==c) {
            memset(scad, 0, sizeof(scad));
            for(col=0; col<m; col++)
                if(i&(1<<col))
                    for(lin=0; lin<n; lin++)
                        scad[lin]+=a[lin][col];

            for(lin=0; lin<n; lin++)
                scad[lin]=sumlin[lin]-scad[lin];

            sort(scad, scad+n);
            sum=0;
            for(lin=r; lin<n; lin++)
                sum+=scad[lin];
            if(sum>maxs)
                maxs=sum;
        }
    fprintf(fo, "%d", maxs);
    fclose(fi);
    fclose(fo);
    return 0;
}