Cod sursa(job #185621)

Utilizator katakunaCazacu Alexandru katakuna Data 25 aprilie 2008 18:37:22
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 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][19];
char ok,v[19];

  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){   
    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,sum2+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;   
}