Pagini recente » Istoria paginii runda/training-1 | Cod sursa (job #2149140) | Monitorul de evaluare | Cod sursa (job #2008497) | Cod sursa (job #2398564)
#include <cstdio>
#include <algorithm>
FILE* FIN=freopen("elimin.in","r",stdin);
FILE* FOUT=freopen("elimin.out","w",stdout);
using namespace std;
int n,m,r,c,sol,ar[16][525],sc[525];
char v[17];
void sw(int&x,int&y)
{
x+=y;
y=x-y;
x-=y;
}
void takemx(int&x,int y)
{
x=(x>y)*(x-y)+y;
}
void cit()
{
int i,j;
scanf("%d%d%d%d",&n,&m,&r,&c);
if(n>m)
{
sw(n,m);
sw(r,c);
}
for(i=0,j=n*m;i<j;i++)
scanf("%d",&ar[i/m][i%m]);
}
int slv()
{
int i,j,sl;
for(i=0;i<m;i++)
sc[i]=0;
for(i=0;i<n;i++)
if(!v[i])
for(j=0;j<m;j++)
sc[j]+=ar[i][j];
sort(sc,sc+m);
for(i=c,sl=0;i<m;i++)
sl+=sc[i];
return sl;
}
void backtrack(int w,int p)
{
if(w==r)
{
takemx(sol,slv());
return;
}
int i;
for(i=p;i<n;i++)
{
v[i]++;
backtrack(w+1,i+1);
v[i]--;
}
}
void af()
{
printf("%d",sol);
}
int main()
{
cit();
backtrack(0,0);
af();
return 0;
}