Cod sursa(job #34447)

Utilizator pitradaPit-Rada Ionel-Vasile pitrada Data 20 martie 2007 19:37:20
Problema Elimin Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<fstream>
using namespace std;
fstream fin,fout;
int M,N,R,C,a[7300],ok,LINR[7300],COLR[7300],RR,CC,i,j,k,aux;
long smax,s;

long suma(void)
{
long s,i,j,k;
s=0;
for (i=0;i<RR;i++)
  for (j=0;j<CC;j++)
    {
    k=LINR[i]*N+COLR[j]+1;
    s=s+a[k];
    }
return s;
}


int main(void)
{

int COLS[7300],LINS[7300];
fin.open("elimin.in",ios::in);
fout.open("elimin.out",ios::out);
fin>>M>>N>>R>>C;
for (i=0;i<M*N;i++) fin>>a[i];
for (i=R;i<M;i++)LINR[i-R]=i;//liniile ramase
for (i=0;i<R;i++)LINS[i]=i;
for (i=C;i<N;i++)COLR[i-C]=i;//coloanele ramase
for (i=0;i<C;i++)COLS[i]=i;

RR=M-R; CC=N-C;
//suma initiala ramasa
smax=suma();
//incercam imbunatatiri
do {
   ok=1;//daca ramane ok egal cu 1 atunci ne oprim	
   //incercam sa schimbam 
   for (i=0;i<R;i++)
      for (j=0;j<RR;j++)
           {
           aux=LINR[j]; LINR[j]=LINS[i]; LINS[i]=aux;
           s=suma();
           if (s<=smax)
              {aux=LINR[j]; LINR[j]=LINS[i]; LINS[i]=aux;} 
              else {smax=s; ok=0;}
           }
   for (i=0;i<C;i++)
      for (j=0;j<CC;j++)
           {
           aux=COLR[j]; COLR[j]=COLS[i]; COLS[i]=aux;
           s=suma();
           if (s<=smax)
              {aux=COLR[j]; COLR[j]=COLS[i]; COLS[i]=aux;} 
              else {smax=s; ok=0;}
           }
   }
while (ok==0);
fout<<smax;
fin.close();
fout.close();
return 0;
}