Pagini recente » Cod sursa (job #1680574) | Cod sursa (job #1342839) | Cod sursa (job #1084449) | Cod sursa (job #473250) | Cod sursa (job #34443)
Cod sursa(job #34443)
#include<fstream>
using namespace std;
fstream fin,fout;
int M,N,R,C,a[7300],ok,LINR[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=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;
}