Cod sursa(job #992365)

Utilizator AeroHHorea Stefan AeroH Data 1 septembrie 2013 18:19:29
Problema Elimin Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("elimin.in");
ofstream g("elimin.out");
long long int m[550][50],i,j,n,l,c,valc,vall,bit,sum,k,rasp,lt,ct,v[1000],sums[1000];

int verif()
{
    int sum=0;
    for (int i=1;i<=l;++i)
    for (int j=1;j<=c;++j)
    if  (!v[j])
    {
    sums[i]+=m[i][j];
    }
    else break;

    sort (sums+1,sums+l+1);
    /*for (int i=1;i<=c;++i)
    g<<sums[i];*/

    for (int i=l;i>lt;--i)
    sum+=sums[i];

    for (int i=1;i<=l;++i)
    sums[i]=0;
    return sum;
}

int verif2()
{
    int sum=0;
    for (int i=1;i<=l;++i)
    for (int j=1;j<=c;++j)
    if  (!v[i])
    {
    sums[j]+=m[i][j];
    }
    else break;

    sort (sums+1,sums+c+1);
    /*for (int i=1;i<=c;++i)
    g<<sums[i];*/

    for (int i=c;i>ct;--i)
    sum+=sums[i];

    for (int i=1;i<=c;++i)
    sums[i]=0;
    return sum;
}

int main()
{
    f>>l>>c>>lt>>ct;
    /*if (c>l)
    l^=c,c^=l,l^=c,lt^=ct,ct^=lt,lt^=ct;*/

    for (i=1;i<=l;++i)
    for (j=1;j<=c;++j)
    f>>m[i][j];

    if (l>c)
    {
        for (i=1;i<=ct;++i)v[i]=1;
        do
        {
            sum=verif();
            if (sum>rasp)
            rasp=sum;
        }while(prev_permutation(v+1,v+c+1));
    }
    else
    {
        for (i=1;i<=lt;++i)v[i]=1;
        do
        {
            sum=verif2();
            if (sum>rasp)
            rasp=sum;
        }while(prev_permutation(v+1,v+l+1));
    }
    g<<rasp;
    return 0;
}