Cod sursa(job #150009)

Utilizator za_wolfpalianos cristian za_wolf Data 6 martie 2008 14:56:30
Problema Elimin Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<stdio.h>
#define NMAX 551
long z[NMAX],y[20],x[NMAX][NMAX],i,j,k,l,a,s,rez,n,m,ln,cl;
void sol()
{
	z[0]=0;
	s=0;
	for (i=1;i<=n;i++)
	{
		z[0]++;
		z[i]=0;
		for (j=1;j<=m;j++)
			if (y[j]==0)
				z[i]+=x[i][j];
		s+=z[i];
	}

	a=1;
	while (a)
	{
		a=0;
		for (i=1;i<n;i++)
			if (z[i]>z[i+1])
			{
				a=z[i];
				z[i]=z[i+1];
				z[i+1]=a;
				a=1;
			}
	}

	for (i=1;i<=ln;i++)
		s-=z[i];
	if (s>rez)
		rez=s;
}
void back(int p, int k)
{
	if (k==cl)
		sol();
	else
		if (p<m)
	{
		back(p+1,k);
		y[p]=1;
		back(p+1,k+1);
		y[p]=0;
	}
}
int main()
{
	freopen("elimin.in","r",stdin);
	freopen("elimin.out","w",stdout);
	scanf("%ld%ld%ld%ld",&n,&m,&ln,&cl);
	rez=-10000000;
	if (m<=5)
		for (i=1;i<=n;i++)
			for (j=1;j<=m;j++)
				scanf("%ld",&x[i][j]);
	else
	{
		a=n; n=m; m=a;
		a=ln; ln=cl; cl=a;
		for (j=1;j<=m;j++)
			for (i=1;i<=n;i++)
				scanf("%ld",&x[i][j]);
	}
	back(1,0);
	printf("%ld\n",rez);


	return 0;
}