Cod sursa(job #119024)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 29 decembrie 2007 10:56:57
Problema Elimin Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream.h>
#include <values.h>

ifstream fin("elimin.in");
ofstream fout("elimin.out");
long long  max=MAXINT;
long n,m,l,c,auxc,auxl,lin[109],col[109],a[200][200];

void citire()
{
   fin>>n>>m>>l>>c;
   for (int i=0;i<n;i++)
      for (int j=0;j<m;j++)
	 fin>>a[i][j];
   fin.close();
}

void suma()
{
 long long S=0;
   for (int i=0;i<n;i++)
       if (lin[i]==1)
	  for (int j=0;j<m;j++)
	      S+=a[i][j];

   for (int k=0;k<m;k++)
      if (col[k]==1)
	 for (int r=0;r<n;r++)
	    if (lin[r]==0)
	       S+=a[r][k];
 if (S<max)
    max=S;
}

void backc(int k)
{
    if (k==m)
    {
    if (auxc==c)
       suma();
       return ;
    }
    if (auxc<c)
    {
      col[k]=1;
      auxc++;
      backc(k+1);
      col[k]=0;
      auxc--;
      backc(k+1);
    }
    else
       backc(k+1);


}

void backl(int k)
{
   if (k==n)
   {
    if (auxl==l)
      backc(0);
      return ;
   }

   if (auxl<l)
   {
      lin[k]=1;
      auxl++;
      backl(k+1);
      lin[k]=0;
      auxl--;
      backl(k+1);
   }
   else
   {
      backl(k+1);
   }
}

int main()
{
   citire();
   backl(0);
   long Su=0;
     for (int i=0;i<n;i++)
	for (int j=0;j<m;j++)
	    Su+=a[i][j];
     Su-=max;
       fout<<Su<<"\n";
       fout.close();
       return 0;
}