Cod sursa(job #1002438)

Utilizator robert_stefanRobert Stefan robert_stefan Data 27 septembrie 2013 19:15:18
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <fstream>
#include <algorithm>
#define IN "elimin.in"
#define OUT "elimin.out"

using namespace std;

ifstream in(IN);
ofstream out(OUT);

int r, c, sol[7300], a[7300][7300], sc[7300], sl[7300], sumtot, sc2[7300], mx, soll, n, m;

inline void write()
{
	//out<<'\n';
	out<<mx<<'\n';
}

inline void read()
{
	in>>n>>m>>r>>c;
	int i, j;
	for(i=1; i<=n; ++i)
		for(j=1; j<=m; ++j)
		{
			in>>a[i][j];
			sl[i]+=a[i][j];
			sc[j]+=a[i][j];
			//sc2[j]+=a[i][j];
			sumtot+=a[i][j];
		}
}

inline void greedy()
{
	sort(sc+1, sc+n+1);
	int i=1;
	for(; i<=c; ++i)
		soll-=sc2[i];//se scade coloana i
	if(soll>mx)
		mx=soll;
}

inline void solution()
{
	int i=1, j=1;
	soll=sumtot;
	
	for(; i<=m; ++i)
		sc2[i]=sc[i];
	for(i=1; i<=r; ++i)
	{
		for(; j<=m; ++j)
		{
			//out<<sc2[j]<<'\n';
			//soll-=sl[sol[i]];
			sc2[j]-=a[sol[i]][j];
			//out<<sc2[j]<<'\n';
		}
		soll-=sl[sol[i]];
	}
	//out<<soll<<endl;
	//out<<endl<<endl;
	//s-au sters liniile
	if(c)
	{
		greedy();
	}
	else
	{
		//out<<soll;
		if(soll>mx)
			mx=soll;
	}
}

inline void tiparestesol(int lim)
{
	for(int i=1; i<=lim; ++i)
		out<<sol[i]<<' ';
	out<<'\n';
}

inline void BT(int k)//combinari de n luate cate r
{
	if(k==r+1)
	{
		//tiparestesol(r);
		solution();
	}
	else
	{
		sol[k]=sol[k-1];
		while(sol[k]<n-r+k)
		{
			++sol[k];
			BT(k+1);
		}
	}
}

int main()
{
	read();
	/*if(r)
		BT(1);
	else if(c)
	{
		soll=sumtot;
		greedy();
	}
	if(!r && !c)
	{
		mx=sumtot;
		write();
	}
	//write();*/
	BT(1);
	in.close();
	out.close();
	return 0;
}