Cod sursa(job #19683)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 19 februarie 2007 20:48:44
Problema Elimin Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.93 kb
#include <fstream.h>

ifstream f1("elimin.in");
ofstream f2("elimin.out");

int main(){
    int n,m,i,j,a[16][7000],r,c,q[16],nr,x[7000],poz,aux;
    long long l[16],p[7000],sum,s,min,s1[7000],max=0,mincp,minc;
    f1>>n;f1>>m;
    f1>>r>>c;
    if (n>m){
       aux=n;
       n=m;
       m=aux;
       sum=0;
       for (i=1;i<=m;i++){
           for (j=1;j<=n;j++){
               f1>>a[n-j+1][i];
               sum+=a[n-j+1][i];
           }
       }
    }
    else{
         sum=0;
         for (i=1;i<=n;i++){
             for (j=1;j<=m;j++){
                 f1>>a[i][j];
                 sum+=a[i][j];
             }
         }
    }
    min=sum;
    for (i=1;i<=n;i++){
        l[i]=0;
        for (j=1;j<=m;j++){
            l[i]+=a[i][j];
        }
    }
    for (j=1;j<=m;j++){
        p[j]=0;
        for (i=1;i<=n;i++){
            p[j]+=a[i][j];
        }
    }
    for (i=0;i<=n;i++)q[i]=0;
    max=0;
    while (q[0]==0){
          nr=0;
          for (i=1;i<=n;i++){
              if (q[i])nr++;
          }
          if (nr==r){
                     s=0;
                     for (i=1;i<=n;i++)if (q[i])s=s+l[i];
                     min=s;
                     for (j=1;j<=m;j++){
                         s1[j]=0;
                         for (i=1;i<=n;i++)if (q[i])s1[j]=s1[j]+a[i][j];
                     }
                     for (j=1;j<=m;j++)x[j]=1;
                     mincp=0;
                     for (i=1;i<=c;i++){
                         minc=sum;
                         for (j=1;j<=m;j++)if (x[j]&&p[j]-s1[j]<minc){minc=p[j]-s1[j];poz=j;}
                         x[poz]=0;
                         mincp+=minc;
                     }
                     if (sum-min-mincp>max)max=sum-min-mincp;
          }
          q[n]++;
          for (i=n;i>=1;i--)if (q[i]==2){q[i]=0;q[i-1]++;}
    }
    f2<<max<<'\n';
    
    f1.close();
    f2.close();
    return 0;
}