Cod sursa(job #2013248)

Utilizator PinkiePie1189Preoteasa Mircea-Costin PinkiePie1189 Data 20 august 2017 21:50:13
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<stdio.h>
#include<map>
#define MAXAREA 7295
void bkt(int cap,int size);
int sum();
FILE*fin,*fout;
int mat[MAXAREA];
bool removed[MAXAREA];
int v[MAXAREA];
std::map<int,int> sums;
int ans=-1;
int N,M,R,C; 
int main()
{
	fin=fopen("elimin.in","r");
	fout=fopen("elimin.out","w");
	fscanf(fin,"%d%d%d%d",&N,&M,&R,&C);
	for(int i=1;i<=N*M;i++)
	{
		fscanf(fin,"%d",&mat[i]);
	}
	bkt(1,1);
	fprintf(fout, "%d\n",ans);
	fclose(fin);
	fclose(fout);
	return 0;
}
int sum()
{
	int summ=0;;
	for(int i=1;i<=M;i++)
	{
		int s=0;
		for(int j=i;j<=(N-1)*M+i;j+=M)
		{
			int line;
			if(j%M==0)
			{
				line=j/M;
			}
			else
			{
				line=j/M+1;
			}
			if(!removed[line])
			{
				s+=mat[j];
			}
		}
		sums[s]=i;
		summ+=s;
	}
	std::map<int,int>::iterator it=sums.begin();
	int cnt=0;
	while(cnt<C)
	{
		summ-=it->second;
		cnt++;
		it++;
	}
	return summ;
}
void bkt(int cap,int size)
{
	if(size==R+1)
	{
		int es=sum();
		if(ans<es)
		{
			ans=es;
		}
		return;
	}
	for(int i=cap;i<=N;i++)
	{
		removed[i]=1;
		bkt(i+1,cap+1);
		removed[i]=0;
	}
}