Cod sursa(job #2519687)

Utilizator richard26Francu Richard richard26 Data 8 ianuarie 2020 11:45:52
Problema Elimin Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
	
#include <bits/stdc++.h>
#define N 8000
 
using namespace std;
 
int a[N][N], sl[N], sc[N], save_bt[N], s, n, m, r, c, maxi, v[N];
 
void calcul()
{
	int i, j, d[N], s1 = 0, s2 = 0;
	for (i = 1; i <= m; i++)
		d[i] = sc[i];
	for (i = 1; i <= r; i++)
	{
		for (j = 1; j <= m; j++)
		{
			d[j] = d[j] - a[v[i]][j];
		}
	}
 
	for (i = 1; i <= r; i++)
		s1 += sl[v[i]];

	sort(d + 1, d + m + 1);
	for (i = 1; i <= c; i++)
		s2 += d[i];
	if(s - s1 - s2 > maxi)
		maxi = s - s1 - s2;
}
 
void bt(int k)
{
	int i;
	for (i = v[k - 1] + 1; i <= n; i++)
	{
		v[k] = i;
		if(k == r)
		{
			calcul();
		}
		else
		{
			bt(k + 1);
		}
	}
}
 
 
int main()
{	
	ifstream f("elimin.in");
	ofstream g("elimin.out");
	f>>n>>m>>r>>c;
	maxi = -1;
	int i, j;
	if (n <= m)
	{
		for (i = 1; i <= n; i++)
		{
		
			for (j = 1; j <= m; j++)
			{
				f>>a[i][j];
			}
			
		}
	} else {
		for (i = 1; i <= n; i++) {
			for (j = 1; j <= m; j++)
			{
				f>>a[j][i];
			}
		}
		swap(n, m);
		swap(r, c);
	}
	
	for (i = 1; i <= n; i++)
		for(j = 1; j <= m; j++)
		{
			sl[i] += a[i][j];
			sc[j] += a[i][j];
			s += a[i][j];
		}

	if (r == 0) {

	}	
	bt(1);
	g<<maxi;
	
	return 0;
}