Cod sursa(job #609496)

Utilizator BlaugranasEnal 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;}