Cod sursa(job #1060838)

Utilizator Robert29FMI Tilica Robert Robert29 Data 18 decembrie 2013 20:17:49
Problema Elimin Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<stdio.h>
#include<algorithm>
using namespace std;

int a[8000][15];
bool v[90];
int n, m, l, c, solutie;
int sol[8000];
void verifica()
{
	
	for (int i = 1; i <= n; ++i)
	{
		sol[i] = 0;
		for (int j = 1; j <= m; ++j)
		{
			if (!v[j])
			{
				sol[i] += a[i][j];
			}
		}
	}
	sort(sol + 1, sol + n + 1);
	int posibila_solutie = 0;
	for (int i = l + 1; i <= n; ++i)
		posibila_solutie += sol[i];
	if (posibila_solutie > solutie)
		solutie = posibila_solutie;
}
void back(int pas, int val)
{
	if (pas<=n && val == c)
	{
		verifica();
		return;
	}
	else if (pas <= n)
	{
		for (int i = 0; i <= 1; ++i)
		{
			v[pas] = i;
			back(pas + 1, val + i);
			v[pas] = false;
		}

	}
	return;
}
int main()
{
	FILE*f = fopen("elimin.in", "r");
	
	fscanf(f, "%d %d %d %d", &n, &m, &l, &c);
	if (n >= m)
	{
		for (int i = 1; i <= n; ++i)
		{
			for (int j = 1; j <= m; ++j)
			{
				fscanf(f, "%d", &a[i][j]);
			}
		}
	}
	else
	{
		swap(n, m);
		swap(l, c);
		for (int i = 1; i <= m; ++i)
		{
			for (int j = n; j; --j)
			{
				fscanf(f, "%d", &a[j][i]);
			}
		}
	}
	fclose(f);

	back(1,0);

	FILE*g = fopen("elimin.out", "w");
	fprintf(g, "%d", solutie);
	fclose(g);

	return 0;
}