Cod sursa(job #187317)

Utilizator savimSerban Andrei Stan savim Data 3 mai 2008 11:47:10
Problema Elimin Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <stdio.h>

#define nmax 31
#define mmax 7926
#include <algorithm>
using namespace std;

int sum,p,q,sol=0,i,j,k,n,m,r,c,nr,co;
int a[nmax][mmax];
int fol[nmax],s[mmax];

int main()
{

    freopen("elimin.in","r",stdin);
    freopen("elimin.out","w",stdout);

    scanf("%d%d%d%d",&n,&m,&r,&c);
    if (n<=m)
    for (i=1; i<=n; i++)
        for (j=1; j<=m; j++)
            scanf("%d",&a[i][j]);
    else
    {
        p=1;q=0;
        for (i=1; i<=n; i++)
            for (j=1; j<=n; j++)
            {
                if (q<m) q++;
                else { p++;q=1;}
                scanf("%d",&a[q][p]);
            }
        k=n;n=m;m=k;k=r;r=c;c=k;
    }

    for (k=0; k<=(1<<n)-1; k++)
    {
       for (i=1; i<=n; i++)
           fol[i]=0;

       nr=0;co=k;
       while (co>0)
       {
           nr+=co%2;co=co>>1;
       }

       if (nr==r)
       {
           for (i=1; i<=m; i++)
              s[i]=0;
           co=k;i=0;

           while (co>0)
           {
              i++;
              fol[i]=co%2;co=co>>1;
           }

           for (i=1; i<=n; i++)
               if (fol[i]==0)
               for (j=1; j<=m; j++)
               {
                   s[j]+=a[i][j];
               }

           sort(s+1,s+m+1);
           
           sum=0;
           for (i=c+1; i<=m; i++)
                sum+=s[i];
           if (sum>sol) sol=sum;
       }
    }

    printf("%d\n",sol);
        
    
    
    return 0;    
}