Cod sursa(job #1487928)

Utilizator aaron72Armand Ioan Anusca Popa aaron72 Data 17 septembrie 2015 17:22:19
Problema Elimin Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");

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

int main(){
    fin>>n>>m>>r>>c;
    if(n>m){
            for(i=1;i<=n;i++)
              for(j=1;j<=m;j++) fin>>a[i][j];
           }
    else{
         for(i=1;i<=n;i++)
           for(j=1;j<=m;j++) fin>>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;
                     }
       }

    fout<<sol;

    fin.close();
    fout.close();
    return 0;
}