Cod sursa(job #377931)

Utilizator ooctavTuchila Octavian ooctav Data 26 decembrie 2009 21:56:55
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#include <algorithm>
#define NMAX 551
#define MMAX 552
int M,N,R,C;
int A[MMAX][NMAX];
int SC[NMAX];
bool val[NMAX];
int SUMA;
int REZULTAT=0;

void citire()
{
	scanf("%d %d %d %d",&M,&N,&R,&C);
	for(int i=1;i<=M;i++)
		for(int j=1;j<=N;j++)
		{
			scanf("%d",&A[i][j]);
			SC[j]=SC[j]+A[i][j];
			SUMA=SUMA+A[i][j];
		}
}

inline void executa()
{
	int s=SUMA,sume[MMAX];
	
	for(int i=0;i<=M;i++)
		sume[i]=0;
	
	for(int i=1;i<=N;i++)
		if(val[i])
			s=s-SC[i];
	
	for(int i=1;i<=M;i++)
		for(int j=1;j<=N;j++)
			if(!val[j])
				sume[i]=sume[i]+A[i][j];
	std::sort(sume,sume+M+1);
	for(int i=1;i<=R;i++)
		s=s-sume[i];
	if(s>REZULTAT)
		REZULTAT=s;
}

inline void back(int k,int nul)
{
	if(nul==C)
	{
		for(;k<N;k++)
			val[k]=1;
		executa();
	}
	if(k==N)
		return;
	
	val[k]=0;	
	back(k+1,nul+1);
	val[k]=1;
	back(k+1,nul);
	
}

int main()
{
	freopen("elimin.in","r",stdin);
	freopen("elimin.out","w",stdout);
	citire();
	back(1,0);
	printf("%d",REZULTAT);
	
	return 0;
}