Cod sursa(job #119268)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 30 decembrie 2007 10:56:53
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <fstream.h>
#include <values.h>
//using namespace std;

ifstream fin("elimin.in");
ofstream fout("elimin.out");
long long max=100000000;
long n,m,l,c,auxl,lin[1009],a[25][600];

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 k=0;k<n;k++)
      if (lin[k]==1)
	 for (int r=0;r<m;r++)
	       S+=a[r][k];

 if (S<max)
    max=S;
}

void backc(int k)
{
    if (k==m)
    {
    if (auxl==l)
       suma();
       return ;
    }
    if (auxl<l)
    {
      lin[k]=1;
      auxl++;
      backc(k+1);
      lin[k]=0;
      auxl--;
      backc(k+1);
    }
    else
       backc(k+1);


}

void sortare()
{
  for (int i=0;i<m;i++)
     for (int j=0;j<n;j++)
	a[n][i]+=a[i][j];

short ok=1,p=m;
   while (ok)
   {
      ok=0;
      p--;
	 for (int y=0;y<p;y++)
	    if (a[n][y]>a[n][y+1])
	    {
	       for (int pp=0;pp<n+1;pp++)
	       {
		 int aux=a[pp][y];
		 a[pp][y]=a[pp][y+1];
		 a[pp][y+1]=aux;
	       }
	    ok=1;
	    }
   }
}
void eliminare()
{
  for (int i=0;i<c;i++)
     for (int j=0;j<n;j++)
	 a[i][j]=0;
}

int main()
{
   citire();

   sortare();
   eliminare();

   backc(0);
   long 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;
}