Pagini recente » Cod sursa (job #3143885) | Cod sursa (job #2887519) | Cod sursa (job #432099) | Cod sursa (job #2834008) | Cod sursa (job #1566490)
#include<cstdio>
#include<algorithm>
using namespace std;
int v[10001],vc[10001],i,j,n,m,k,l,c,st[101],maxi=0,vec[10001];
short int a[601][601];
void back(int k)
{
int cc;
if(k==l+1)
{
int c1,c2;
for(c1=1;c1<=m;c1++)
vec[c1]=vc[c1];
for(c1=1;c1<=l;c1++)
for(c2=1;c2<=m;c2++)
vec[c2]-=a[st[c1]][c2];
sort(vec+1,vec+m+1);
int s=0;
for(c2=c+1;c2<=m;c2++)
s+=vec[c2];
if(s>maxi)
maxi=s;
}
else
{
for(cc=st[k-1]+1;cc<=n;cc++)
{
st[k]=cc;
back(k+1);
}
}
}
void back1(int k)
{
int cc;
if(k==c+1)
{
int c1,c2;
for(c1=1;c1<=n;c1++)
vec[c1]=v[c1];
for(c2=1;c2<=c;c2++)
for(c1=1;c1<=n;c1++)
vec[c1]-=a[c1][st[c2]];
sort(vec+1,vec+n+1);
int s=0;
for(c2=l+1;c2<=n;c2++)
s+=vec[c2];
if(s>maxi)
maxi=s;
}
else
{
for(cc=st[k-1]+1;cc<=m;cc++)
{
st[k]=cc;
back1(k+1);
}
}
}
int main ()
{
freopen("elimin.in","r",stdin);
freopen("elimin.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&l,&c);
st[0]=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%hd",&a[i][j]);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
v[i]+=a[i][j];
vc[j]+=a[i][j];
}
if(n<=m)
{
back(1);
printf("%d",maxi);
}
else
{
back1(1);
printf("%d",maxi);
}
return 0;
}