Cod sursa(job #1298313)

Utilizator pavlov.ionPavlov Ion pavlov.ion Data 22 decembrie 2014 18:41:52
Problema Elimin Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<fstream>
#include<algorithm>
#include<cstring>
#define MAXN 1000
using namespace std;
ifstream cin("elimin.in");
ofstream cout("elimin.out");
	int M,N,R,C;
	int A[MAXN][20];
	int suma_matrice=0,suma_linii,suma_coloane;
	int k,nr_col,s_linie[MAXN],sol=-1000000,i,j,nr;
int main() {
	cin>>M>>N>>R>>C;
	if(M>N){
	for(i=1;i<=M;i++)
		for(j=1;j<=N;j++)
			cin>>A[i][j];
	}
	else{
	for(i=1;i<=M;i++)
		for(j=1;j<=N;j++)
			cin>>A[j][i];
	swap(N,M);
	swap(R,C);
	}
    for(i=1;i<=M;i++)
		for(j=1;j<=N;j++)
			suma_matrice+=A[i][j];
	nr=(1<<N);
for(k=0;k<nr;k++){
		nr_col=0;
		for(i=0;i<N;i++)
			if(k&(1<<i)) nr_col++;
		if(nr_col==C){
			suma_linii=0;
			suma_coloane=0;
			for(i=1;i<=M;i++)
				s_linie[i]=0;
			for(i=1;i<=M;i++)
				for(j=1;j<=N;j++)
					if(k&(1<<(j-1)))
						suma_coloane+=A[i][j];
					else s_linie[i]+=A[i][j];
					sort(s_linie+1,s_linie+M+1);
		for(i=1;i<=R;i++)
			suma_linii+=s_linie[i];
		if(suma_matrice-suma_coloane-suma_linii>sol)
				sol=suma_matrice-suma_coloane-suma_linii;
		}
}
cout<<sol;
return 0;
}