Cod sursa(job #567449)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 30 martie 2011 08:32:30
Problema Elimin Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
# include <fstream>
# include <algorithm>
using namespace std;
std :: ifstream f ("elimin.in");
std :: ofstream g ("elimin.out");
int a[1000][1000];
int s[1000], x[1000];
int n, m, l, c, L, C, sol, i, j;
void make (){
	int i, j, st = 0;
	for (i = 1; i <= m; ++i) s[i] = 0;
	for (i = 1; i <= n; ++i)
		for (j = 1; j <= m; ++j)
			s[j] += a[i][j] * (!x[i]);
	sort (s + 1, s + m + 1);
	for (i = m; i > c; --i)
		st = st + s[i];
	if (sol < st) sol = st;
}
void back (){
	int k = 1;
	x[k] = -1;
	do {
		while (x[k] < 1){
			++x[k];
			L = L + x[k];
			if (n == k){
				if (L == l) make ();
			}
			else{
				++k;
				L = L - x[k];
				x[k] = -1;
			}
		}
		--k;
	} while ( k > 0 );
}
int main (){
	f >> n >> m >> l >> c;
	if (n <= m){
		for (i = 1; i <= n; ++i)
			for (j = 1; j <= n; ++j)
				f >> a[i][j];
		back ();
	}
	else{
		for (i = 1; i <= n; ++i)
			for (j = 1; j <= n; ++j)
				f >> a[j][i];
		n ^= m ^= n ^= m;
		l ^= c ^= l ^= c;
		back ();
	}
	g << sol << '\n';
	g.close ();
	return 0;
}