Cod sursa(job #402613)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 23 februarie 2010 23:39:39
Problema Elimin Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
# include <fstream.h>
using namespace std;
ifstream f ("elimin.in");
ofstream g ("elimin.out");
int a[600][600],b[1000],i,j,aux,smax=-10000000,q,w,n,m,s[1000],sf,z,k,kk,ss[1000],ss2[1000];


void xyz ()
 {int i;
	 
	 sf=0;
	 
	 for (k=1;k<=m;k++)
	 {
		 z=ss[k];
		 for (i=1;i<=q;i++)
			 z=z-a[b[i]][k];
		 sf=sf+z;
		 s[k]=z;
	 }
	 
	 sort (s+1,s+m+1);
	 
	 
 for (i=1;i<=w;i++)
	 sf=sf-s[i];
 if (smax<sf)
	 smax=sf;
 }
 
 
 
 
 
 
 
 

  void back (int i)
  {
	  int val;
	  for (val=b[i-1]+1;val<=n;val++)
	  {
		  b[i]=val;
		  if (i==q)
		  xyz ();
		  if (i<q)
			  back (i+1);
	  }
  }

void xyz2 ()
 {int i;
	 
	 sf=0;
	 
	 for (k=1;k<=n;k++)
	 {
		 z=ss2[k];
		 for (i=1;i<=w;i++)
			 z=z-a[k][b[i]];
		 sf=sf+z;
		 s[k]=z;
	 }
	 
	 sort (s+1,s+n+1);
	 
	 
 for (i=1;i<=q;i++)
	 sf=sf-s[i];
 if (smax<sf)
	 smax=sf;
 }
 
 
 
 
 
 
 
 

  void back2 (int i)
  {
	  int val;
	  for (val=b[i-1]+1;val<=m;val++)
	  {
		  b[i]=val;
		  if (i==w)
		  xyz2 ();
		  if (i<w)
			  back2 (i+1);
	  }
  }










int main ()
{
	f>>n>>m>>q>>w;
	for (i=1;i<=n;i++)
		for (j=1;j<=m;j++)
			f>>a[i][j];

  for (i=1;i<=m;i++)
  {
	  sf=0;
	  for (j=1;j<=n;j++)
		  sf=sf+a[j][i];
	  ss[i]=sf;
  }
  for (i=1;i<=n;i++)
  {
	  sf=0;
	  for (j=1;j<=m;j++)
		  sf=sf+a[i][j];
	  ss2[i]=sf;
  }
	  
		if (n<m)
		back (1);
		else
			back2 (1);
		g<<smax;
}