Cod sursa(job #185618)

Utilizator katakunaCazacu Alexandru katakuna Data 25 aprilie 2008 18:28:50
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include<stdio.h>      
#include<algorithm>
using namespace std;
int sum[522],sum2[522],s2,k,su,max,i,j,x,aux,n,m,l,c,a[522][16];
char ok,v[16];



int cmp(int a,int b) {
return a>b;
}
     



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;      
  aux=c; c=l; l=aux;      
     
 }      
     
     
 for(j=1;j<=n;j++){      
    for(k=1;k<=m;k++){      
    sum[j]+=a[j][k];      
    }      
      }      
     
     
     
 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)   
   break;   
  
  }   
     
    if(x==c){      
    s2=su;      
     
     
     for(j=1;j<=n;j++){      
     sum2[j]=sum[j];      
     }      
     
     
    for(j=1;j<=m;j++){      
     
      if(v[j]==1){      
     
     for(k=1;k<=n;k++){      
     s2-=a[k][j];      
     sum2[k]-=a[k][j];      
     }      
     
      }      
     
    }      
     
     
      sort(sum2+1,suma2+n+1,cmp);
     
     
      for(k=1;k<=l;k++){      
      s2-=sum2[k];      
      }      
     
     
     
     
    if(s2>max)max=s2;      
     
    }      
     
     
 }      
     
     
     
fclose(f);      
     
FILE *g=fopen("elimin.out","w");      
fprintf(g,"%d",max);      
fclose(g);      
     
return 0;      
}