Cod sursa(job #1447801)

Utilizator andrei_xdsParasca Andrei andrei_xds Data 5 iunie 2015 12:48:07
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
using namespace std;
#include <fstream>
#include <algorithm>
FILE *f=fopen("elimin.in", "r");
ofstream g("elimin.out");
int n, m, r, z;
int a[100][100];
int aux[1001];
int smax=0;
    struct elimin
        {
        int l=0, c=0;
        };
elimin v[1001];
    struct vec
        {
            int s, poz;
        }
suma[1001];
bool cmp(vec a, vec b)
{
    return a.s<b.s;
}
int cont(int k)
{
    int i;
    for(i=1; i<k; i++)
    {
        if (aux[i]==aux[k]) return 0;
    }
    return 1;
}
void afiseaza(int k)
{
    int i, j, s1=0;
    for(i=1;i<=n;i++)
        if(v[i].l==0)
            for(j=1;j<=n;j++)
                if(aux[j]==1)
                    s1=s1+a[i][j];
    if(s1>smax) smax=s1;
}

void bkt()
{
    int k, nrz;
    k=1;
    aux[k]=-1;
    nrz=1;
    while (k>0)
        if(aux[k]<1)
        {
            aux[k]++;
            if(aux[k]==1) nrz--;

            if(nrz <= z)
            {
                if(k==m) {if(nrz==z) afiseaza(k);}
                    else k++, aux[k]=-1, nrz++;
            }
        }
            else k--;
}

int main()
{
     int i, j;

     fscanf(f, "%d" "%d" "%d" "%d", &n , &m , &r , &z);
     for(i=1; i<=n; i++)
     {
        suma[i].poz=i;
        for(j=1; j<=m; j++)
            {
            fscanf(f, "%d" , &a[i][j]);
            suma[i].s=suma[i].s+a[i][j];
            }
     }
    sort(suma+1, suma+n+1, cmp);

    for(i=1; i<=r; i++)
        v[suma[i].poz].l=1;

    bkt();

    g<<smax;
    return 0;
}