Pagini recente » Rating Serban R C (ArcadiaFalls) | Cod sursa (job #1190376) | Cod sursa (job #2083749) | Cod sursa (job #1395027) | Cod sursa (job #1482640)
#include <stdio.h>
#include <algorithm>
using namespace std;
int a[550][550],n,m,r,c,maxim;
int v[550],sum[550];
void ver1()
{
int pos=1;
for(int i=1;i<=m;i++) sum[i]=0;
for(int i=1;i<=n;i++)
{
if(v[pos]==i)
{
++pos;
continue;
}
for(int j=1;j<=m;j++)
{
sum[j]+=a[i][j];
}
}
sort(sum+1,sum+1+m);
int suma=0;
for(int i=c+1;i<=m;i++) suma+=sum[i];
if(maxim<suma) maxim=suma;
}
void bcs1(int pos)
{
if(pos==r+1) ver1();
else
{
for(int i=v[pos-1]+1;i<=n;i++)
{
v[pos]=i;
bcs1(pos+1);
}
}
}
void ver2()
{
int pos=1;
for(int i=1;i<=n;i++) sum[i]=0;
for(int i=1;i<=m;i++)
{
if(v[pos]==i)
{
++pos;
continue;
}
for(int j=1;j<=n;j++)
{
sum[j]+=a[j][i];
}
}
sort(sum+1,sum+1+n);
int suma=0;
for(int i=r+1;i<=n;i++) suma+=sum[i];
if(maxim<suma) maxim=suma;
}
void bcs2(int pos)
{
if(pos==c+1) ver2();
else
{
for(int i=v[pos-1]+1;i<=m;i++)
{
v[pos]=i;
bcs2(pos+1);
}
}
}
int main()
{
freopen ("elimin.in","r",stdin);
freopen ("elimin.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&r,&c);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++) scanf("%d",&a[i][j]);
}
if(n<m)
{
bcs1(1);
}
else
{
bcs2(1);
}
printf("%d\n",maxim);
}