Cod sursa(job #983477)

Utilizator abel1090Abel Putovits abel1090 Data 11 august 2013 21:47:06
Problema Elimin Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

vector< vector<short> > mat;
vector< vector<short> > temp;
vector<bool> elim_ln;
vector<int> sumcol;
short m,n,R,C,result,result_max=0;

int sum_clmn(short sz)
{
   int s=0;
   for(short i=0;i<m;i++)
     s+=mat[i][sz];
   return s;
}


int sum()
{
   long s=0;
   for(short i=0;i<m;i++)
     for(short j=0;j<n;j++)
       s+=mat[i][j];
   return s;
}

void elimin(short sz)
{
   for(short i=0;i<n;i++)
     mat[sz][i]=0;
   elim_ln[sz]=true;
}

void backt_ln(short k)
{
   if(k>R)
   {
      result=sum();
      for(short j=0;j<n;j++)
        sumcol[j]=sum_clmn(j);
      sort(sumcol.begin(), sumcol.end());
      for(short j=0;j<C;j++)
        result-=sumcol[j];
      if(result>result_max)
        result_max=result;
   }
   else
     for(short i=0;i<m;i++)
       if(elim_ln[i]!=true)
       {
          for(short j=0;j<n;j++)
            temp[i][j]=mat[i][j];
          elimin(i);
          backt_ln(k+1);
          for(short j=0;j<n;j++)
            mat[i][j]=temp[i][j];
          elim_ln[i]=false;
       }

}

int main()
{
   ifstream fin("elimin.in");
   ofstream fout("elimin.out");

   fin>>m>>n>>R>>C;

   mat.resize(m);
   for(short i=0;i<m;i++)
     mat[i].resize(n);
   for(short i=0;i<m;i++)
     for(short j=0;j<n;j++)
       fin>>mat[i][j];
   elim_ln.resize(m);
   temp.resize(m);
   for(short i=0;i<m;i++)
     temp[i].resize(n);
   sumcol.resize(n);

   backt_ln(1);

   cout<<result_max;
   fout<<result_max;
   return 0;
}