Cod sursa(job #133427)

Utilizator katakunaCazacu Alexandru katakuna Data 8 februarie 2008 17:22:06
Problema Elimin Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<stdio.h>
int ok,sum[501],s,k,su,v[20],max,i,j,x,aux,n,m,l,c,a[500][20];

int main(){

FILE *f=fopen("elimin.in","r");
fscanf(f,"%d %d %d %d",&n,&m,&l,&c);

max=-32001;

 if(n>=m){

    for(i=1;i<=n;i++){
      for(j=1;j<=m;j++){
      fscanf(f,"%d",&a[i][j]);
      su+=a[i][j];
      }
    }

 }


 else{

   for(i=1;i<=n;i++){

     for(j=m;j>=1;j--){
     fscanf(f,"%d",&a[j][i]);
     su+=a[j][i];
     }
   }

  aux=n; n=m; m=aux;
  c=aux; c=l; l=aux;

 }


 for(i=0;i<=(1<<m)-1;i++){

  for(j=m-1;j>=0;j--){
  v[j+1]=(i>>j)&1;
  }

  x=0;
  for(j=1;j<=m;j++){
  if(v[j]==1)x++;
  }

    if(x==c){
    s=su;

	for(j=1;j<=m;j++){

	  if(v[j]==1){

	     for(k=1;k<=n;k++){
	     s-=a[k][j];
	     }

	  }

	}


     for(j=1;j<=n;j++){
     sum[j]=0;
     }

      for(j=1;j<=n;j++){
	for(k=1;k<=m;k++){
	  if(v[k]!=1)
	  sum[j]+=a[j][k];
	}
      }


      ok=1;
      while(ok){
      ok=0;

	for(j=1;j<n;j++){

	  if(sum[j]>sum[j+1]){
	  aux=sum[j];
	  sum[j]=sum[j+1];
	  sum[j+1]=aux;
	  ok=1;
	  }

	}

      }



      for(k=1;k<=l;k++){
      s-=sum[k];
      }




    if(s>max)max=s;

    }


 }



fclose(f);

FILE *g=fopen("elimin.out","w");
fprintf(g,"%d",max);
fclose(g);

return 0;
}