Cod sursa(job #1214408)

Utilizator buzu.tudor67Tudor Buzu buzu.tudor67 Data 30 iulie 2014 11:49:05
Problema Elimin Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fi("elimin.in");
ofstream fo("elimin.out");

int suma_matrice,s_linie[600],s_coloana[20];
int i,j,n,m,r,c,a[20][601];
int suma_coloane,suma_linii;
int q,nr,nr_col,sol;

int main(){
    fi>>n>>m>>r>>c;
    if(n>m){
            for(i=1;i<=n;i++)
              for(j=1;j<=m;j++) fi>>a[i][j];
           }
    else{
         for(i=1;i<=n;i++)
           for(j=1;j<=m;j++) fi>>a[j][i];
         
         swap(n,m);
         swap(r,c);
        }
    
    suma_matrice=0;
    for(i=1;i<=n;i++)
      for(j=1;j<=m;j++)
         {
          suma_matrice+=a[i][j];
          s_coloana[j]+=a[i][j];
         }
    
    nr=(1<<m);
    for(q=0;q<nr;q++)
       {
        nr_col=0; 
        for(j=0;j<m;j++)
          if(q&(1<<j)) nr_col++;
          
        if(nr_col==c){
                      suma_coloane=0; suma_linii=0;
                      for(i=1;i<=n;i++) s_linie[i]=0;
                      
                      for(i=1;i<=n;i++)
                        for(j=1;j<=m;j++)
                          if(q&(1<<(j-1))) suma_coloane+=a[i][j];
                          else s_linie[i]+=a[i][j];
                           
                      sort(s_linie+1,s_linie+n+1);
                      for(i=1;i<=r;i++) suma_linii+=s_linie[i];
                      
                      if(suma_matrice-suma_coloane-suma_linii>sol)
                        sol=suma_matrice-suma_coloane-suma_linii;
                     }
       } 
    
    fo<<sol;
    
    fi.close();
    fo.close();
    return 0;
}