Cod sursa(job #136267)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 15 februarie 2008 13:03:10
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include<stdio.h>
#include<stdlib.h>
#define N 700
#define Kmax 15

int compara(const void *a,const void*b){
    return *(int*)a-*(int*)b;
}

int main(){
	int t[N][N],n,m,r,c,max=0,mmax,i,j,k=0,sum[N],aux,y,ss=0,rr=0,v[Kmax],pp;
	freopen("elimin.in","r",stdin);
	freopen("elimin.out","w",stdout);
	scanf("%d%d%d%d",&m,&n,&r,&c);
	for (i=1;i<=m;++i){
		for (j=1;j<=n;++j){
			scanf("%d",&t[i][j]);
			//v1[i]+=t[i][j];
		}
    }
	if (m<=15){
       aux=m;
       m=n;
       n=aux;
       aux=r;
       r=c;
       c=aux;
    }
    pp=2<<m-1;
    for (i=0;i<=pp-1;++i){
        y=0;ss=0;rr=0;
        for (j=1;j<=m+5;++j)
            v[j]=0;
        for (j=1;j<=n+5;++j)
            sum[j]=0;
        j=i;
        while (j){
                ++y;
                v[y]=j%2;
                j/=2;
        }
        for (j=1;j<=m;++j){
              if (v[j]==0){
                 for (k=1;k<=n;++k)
                     sum[k]+=t[j][k];
                 ++ss;
              }
        }
        if (ss==n-r){
             qsort(sum,n+1,sizeof(sum[0]),compara);
             //for (j=1;j<=n;++j)
               //  printf("%d ",sum[j]);
             //printf("\n");
             for (j=c+1;j<=n;++j)
                 rr+=sum[j];
             if (rr>max)
                max=rr;
        }
    }
    printf("%d\n",max);
    fclose(stdin);
    fclose(stdout);
	return 0;
}