Cod sursa(job #609496)
Utilizator | Enal Gemaledin Blaugranas | Data | 21 august 2011 18:02:51 |
---|---|---|---|
Problema | Elimin | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.06 kb |
#include<stdio.h>
int n,m,i,j,k,e,a[17][17],max=0,s[17],r1,r2,s1[17],s2[17],t,r,o,l,sum,b[17][17],d[17][17],c,w[17],q;
int main()
{freopen("elimin.in","r",stdin);
freopen("elimin.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&r1,&r2);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&a[i][j]),q+=a[i][j];
k=t=1;
s1[k]=s2[t]=0;
while(k>0)
{s1[k]++;
if(s1[k]<=n)
if(k==r1)
{l++;
s[l]=0;
for(i=1;i<=n;i++)
{r=0;
for(e=1;e<=k;e++)
if(s1[e]==i)
r=1;
if(!r)
for(j=1;j<=m;j++)
s[l]+=a[i][j];}
for(e=1;e<=k;e++)
d[l][e]=s1[e];}
else
{k++;
if(k>1)
s1[k]=s1[k-1];
else
s1[k]=0;}
else
k--;}
while(t>0)
{s2[t]++;
if(s2[t]<=m)
if(t==r2)
{c++;
w[c]=0;
for(j=1;j<=m;j++)
{r=0;
for(e=1;e<=t;e++)
if(s2[e]==j)
r=1;
if(!r)
for(i=1;i<=n;i++)
w[c]+=a[i][j];}
for(e=1;e<=t;e++)
b[c][e]=s2[e];}
else
{t++;
if(t>1)
s2[t]=s2[t-1];
else
s2[t]=0;}
else
t--;}
for(i=1;i<=l;i++)
for(j=1;j<=c;j++)
{sum=s[i]+w[j]-q;
for(e=1;e<=r1;e++)
for(o=1;o<=r2;o++)
sum+=a[d[i][e]][b[j][o]];
if(sum>max)
max=sum;}
printf("%d",max);
return 0;}