Cod sursa(job #674173)

Utilizator Cristina94Cristina Ungurean Cristina94 Data 5 februarie 2012 18:55:28
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("elimin.in");
ofstream g("elimin.out");
int x[100], n,m, y[100][100],lin,r,c,a[900000][100];

int bun(int k)
{
	for(int j=1; j<k; j++)
		if(x[j]==x[k])
			return 0;
		return 1;
}
 
void back(int i)
{
	lin=0;
	while(i>0&& i<=n)
	{
		x[i]++;
		if(x[i]>n)
		{
			x[i]=0;
			i--;
		}
		else
			if(bun(i))
				i++;
		if(i>n)
		{
			lin++;
			for(int j=1;j<=n;j++)
				y[lin][j]=x[j];
			i=n;
		}
	}
}
int main()
{
	int i,j,k,s,el,max=0;
	f>>m>>n>>r>>c;
	for(i=1;i<=m;i++)
		for(j=1;j<=n;j++)
			f>>a[i][j];
	
	back (1);
	
	//max=0;
	
	//pe coloana, summa minima pe vertical
	for(k=1;k<=lin;k++)
	{	
		s=0;
		for(i=1;i<=m;i++)
			for(j=1;j<=n-c;j++)
				s=s+a[i][y[k][j]]; // suma cu coloanele eliminate
		if(max<s)
			max=s, el=k;
		
	}
	
	for(k=n-c;k<n;k++)
		for(i=1;i<=m;i++)
			a[i][y[el][k]]=0;
	
	//suma minima pe linii, pe orizontala
	
	for(k=1;k<=lin;k++)
	{	
		s=0;
		for(j=1;j<=n-c;j++)
			for(i=1;i<=m;i++)
				s=s+a[i][y[k][j]]; // suma cu liniile eliminate
		if(max<s)
			max=s, el=k;
	}
	s=0;
	for(i=1;i<=m;i++)
		for(j=1;j<=n;j++)
			s+=a[i][j];
	
	g<<s;
	return 0;
}