Pagini recente » Borderou de evaluare (job #1810367) | Cod sursa (job #2738963) | Cod sursa (job #1976952) | Istoria paginii runda/urmasii_lui_taraban/clasament | Cod sursa (job #2013248)
#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;
}
}