Cod sursa(job #1753950)

Utilizator PaulCbnCiobanu Paul PaulCbn Data 7 septembrie 2016 12:56:37
Problema Elimin Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

int N,M,R,C;
int a[90][3700];
int x[90];
void citire()
{
    scanf("%d%d",&N,&M);

    if(N<=M) ///citire normala
    {
        scanf("%d%d",&R,&C);
        for(int i=1; i<=N; i++)
            for(int j=1; j<=M; j++)
                scanf("%d",&a[i][j]);

    }
    else ///citire invers
    {
        scanf("%d%d",&C,&R);
        swap(N,M);
        for(int i=1; i<=N; i++)
            for(int j=1; j<=M; j++)
                scanf("%d",&a[j][i]);
    }


}

int col[3700];
int sum, smax=0;
void verif()
{
    sum=0;
    for(int j=1;j<=M;j++)
        col[j]=0;
    for(int i=1;i<=R;i++)
        for(int j=1;j<=M;j++)
            col[j] += a[x[i]][j];
    sort(col+1,col+M+1);
    for(int j=C+1;j<=N;j++)
        sum+=col[j];
    if(sum>smax)
        smax = sum;
}

void rez()
{
    R = N - R;
    for(int i=1; i<=R; i++)
        x[i]=i;
    int k=R;
    while(k)
    {
        verif();

        k=R;
        while(x[k]>=N - (R-k) && k)
            k--;
        if(k==0)
            return;
        x[k]++;
        for(int i=k+1; i<=R; i++)
            x[i]=x[i-1]+1;
    }

}



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