Cod sursa(job #149991)

Utilizator znakeuJurba Andrei znakeu Data 6 martie 2008 14:05:16
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <stdio.h>
#include <algorithm>
#define MAXM 7300
#define MAXN 16

using namespace std;

int v[MAXM][MAXN];
int sl[MAXM];
int n,m,R=0,C=0;
int asdf=0;

bool cmp(int x, int y)
{
	return x>y;
}

int sumlin(int c)
{
	int i,j,t,s=0;
	for (i=0; i<m; ++i)
	{
		sl[i]=0; j=0; t=c;
		for (;j<n; ++j,t=t>>1)
			sl[i]+=v[i][j]*(t & 1);
	}
	sort(sl,sl+m,cmp); s=0;
	for (i=0; i<m-R; ++i)
		s+=sl[i];
	return s;
}

void elimc()
{
	int t,k=1<<n,l,i;
	for (i=0; i<k; ++i)
	{
		t=i; l=0;
		while (t)
		{
			if (t&1)
				++l;
			t=t>>1;
		}
		if (l==n-C)
		{
			t=sumlin(i);
			if (t>asdf)
				asdf=t;
		}
	}		
}


int main()
{
	FILE *in  = fopen("elimin.in","r");
	FILE *out = fopen("elimin.out","w");
	int i,j,k,l=0;
	char L[7*MAXM];
	
	fscanf(in,"%d%d%d%d",&m,&n,&R,&C);
	if (n>=MAXN)
	{
		j=n; n=m; m=j;
		j=R; R=C; C=j;
		for (i=0; i<n; ++i)
		{
			fgets(L,7*MAXM,in); l=0;
			for (j=0; j<m; ++j)
			{
				k=0;
				while (L[l]>'9' || L[l]<'0')
					l++;
				while (L[l]>='0' && L[l]<='9')
					k=k*10+(L[l++]-'0');				
				v[j][i]=k;				
			}			
		}
	}
	else
	{
		for (i=0; i<m; ++i)
		{
			fgets(L,7*MAXM,in); l=0;
			for (j=0; j<m; ++j)
			{
				k=0;
				while (L[l]>'9' || L[l]<'0')
					l++;
				while (L[l]>='0' && L[l]<='9')
					k=k*10+(L[l++]-'0');				
				v[i][j]=k;				
			}			
		}
	}
	elimc();
	fprintf(out,"%d\n",asdf);
	
	fclose(in);
	fclose(out);
	return 0;
}