Cod sursa(job #711592)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 12 martie 2012 14:06:23
Problema Elimin Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <cstdio>
#include <iostream>
#include <algorithm>
#define LE 8000
#define FOR for(i=1;i<=n;++i) for(j=1;j<=m;++j)
using namespace std;
int i,j,m,n,MAX=-10000,S[LE],SE[LE],semn[LE],a[90][LE],M[90][LE],nrl,nrc;

int suma(){
	int rez=0,l=0,ok=0;
	for(i=1;i<=m;++i) S[i]=0;
for(i=1;i<=n;++i) l=l+1-semn[i];
	
if (l==nrl)
	ok=1;
	FOR{
		M[i][j]=a[i][j];M[i][j]*=semn[i];
		S[j]+=M[i][j];
	}
	
	sort(S+1,S+m+1);
	for(i=nrc+1;i<=m;++i) rez+=S[i];

	

if (ok==1)MAX=max(rez,MAX);
}
	
int back(int k){
    if(k==n+1) suma();
	else {
	   semn[k]=1,back(k+1);
	   semn[k]=0,back(k+1);
    }
}
int main()
{
	freopen("elimin.in","r",stdin);
	freopen("elimin.out","w",stdout);
	
	scanf("%ld%ld%ld%ld",&n,&m,&nrc,&nrl);
	FOR if(n<m) scanf("%ld",&a[i][j]); else  scanf("%ld",&a[j][i]);
	
	if (n>m) swap(n,m),swap(nrl,nrc);
	if (n==0||m==0) printf("1"); else {
	back(1); printf("%ld\n",MAX);}
	return 0;
}