Cod sursa(job #21970)

Utilizator anamaria1Ozorchevici Ana Maria anamaria1 Data 25 februarie 2007 12:02:00
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
//#pragma option -3 -r -Z -O2 -a
#include<fstream.h>
int st[7295],k,q,p,v[7295],n2,m2,m,n;
unsigned long smax=0;
void init()
{st[k]=st[k-1];
}
int succesor()
{if((st[k]<q)&&(k<=p)) {st[k]++;return 1;}
   else return 0;
}
int tipar()
{int i,l=0,l2,la=0,j;
unsigned long sum=0;
for(i=1;i<p;i=i+n2)
 {la=l;
  if(st[i]%n) l=st[i]/n+1;
    else l=st[i]/n;
  if(i>1) if(la==l) return 0;
  for(j=i+1;j<i+n2;j++)
   {if(st[j]%n) l2=st[j]/n+1;
      else l2=st[j]/n;
    if(l!=l2) return 0;
   }
 }
for(i=1;i<=p;i++) sum=sum+v[st[i]];
if(sum>smax) smax=sum;
return 1;
}
int main()
{ifstream f("elimin.in");
ofstream g("elimin.out");
int r,c,i,j,as;
f>>m>>n>>r>>c;m2=m-r;n2=n-c;
q=m*n;p=q-(n*r+m*c)+r*c;
for(i=1;i<=m;i++)
 for(j=1;j<=n;j++)
   f>>v[(i-1)*n+j];
f.close();
k=1;st[1]=0;
while(k)
 {as=succesor();
  if(as) {if(k==p) tipar();
	   else {k++;init();}
	 }
    else k--;
 }
g<<smax<<'\n';
g.close();
return 0;
}