Pagini recente » Cod sursa (job #1349669) | Cod sursa (job #1359864) | Cod sursa (job #2305641) | Cod sursa (job #1349001) | Cod sursa (job #34462)
Cod sursa(job #34462)
#include<fstream>
#include<stdlib.h>
using namespace std;
fstream fin,fout;
int M,N,R,C,a[7300],ok,LIN[7300],COL[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=LIN[i]*N+COL[j]+1;
s=s+a[k];
}
return s;
}
int main(void)
{
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=0;i<M;i++)LIN[i]=i;
for (i=0;i<N;i++)COL[i]=i;
for (i=0;i<1000;i++)
{
j=floor(M*random());
k=floor(M*random());
aux=LIN[j];LIN[j]=LIN[k];LIN[k]=aux;
j=floor(M*random());
k=floor(M*random());
aux=COL[j];COL[j]=COL[k];COL[k]=aux;
}
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<RR;i++)
for (j=RR;j<M;j++)
{
aux=LIN[j]; LIN[j]=LIN[i]; LIN[i]=aux;
s=suma();
if (s<=smax)
{aux=LIN[j]; LIN[j]=LIN[i]; LIN[i]=aux;}
else {smax=s; ok=0;}
}
for (i=0;i<CC;i++)
for (j=CC;j<N;j++)
{
aux=COL[j]; COL[j]=COL[i]; COL[i]=aux;
s=suma();
if (s<=smax)
{aux=COL[j]; COL[j]=COL[i]; COL[i]=aux;}
else {smax=s; ok=0;}
}
}
while (ok==0);
fout<<smax;
fin.close();
fout.close();
return 0;
}