Pagini recente » Cod sursa (job #1532899) | Cod sursa (job #1274067) | Cod sursa (job #162776) | Cod sursa (job #1974512) | Cod sursa (job #729049)
Cod sursa(job #729049)
#include <utility>
#include <cstdio>
#define _in "elimin.in"
#define _out "elimin.out"
#define max(a,b) ((a>b) ? 1:2)
#define _nmax 7296
using namespace std;
int M,N,R,C;
long matr[_nmax][_nmax],S;
int minx=-1,miny=-1,pminx,pminy;
void s_x()
{
int i;
for(i=1;i<=N;i++)
{
matr[0][i]-=matr[pminx][i];
}
S-=matr[pminx][0];
--R;
matr[pminx][0]=-1;
}
void s_y()
{
int i;
for(i=1;i<=M;i++)
{
matr[i][0]-=matr[i][pminy];
}
S-=matr[0][pminy];
--C;
matr[0][miny]=-1;
}
void afla_y()
{
int i,j,minloc,pminloc;
miny=0;
for(i=1;i<=M;i++)
{
minloc=-1;
for(j=1;j<=N;j++)
{
if(matr[i][j]<minloc || minloc==-1)
{
minloc=matr[i][j];
pminloc=j;
}
}
if(++matr[N+1][pminloc]>miny)
{
pminy=i;
miny=matr[N+1][pminloc];
}
}
}
void afla_x()
{
minx=0;
int j,i,minloc,pminloc,maxloc=0;
for(j=1;j<=N;j++)
{
minloc=-1;
for(i=1;i<=M;i++)
{
if(matr[i][j]<minloc || minloc ==-1)
{
minloc=matr[i][j];
pminloc=i;
}
}
if(++matr[pminloc][N+1]>minx)
{
pminx=pminloc;
minx=matr[pminloc][N+1];
}
}
}
void conditii()
{
int minabs;
if(minx!=-1)
if(miny!=-1)
{
minabs=max(minx,miny);
switch(minabs)
{
case 1: s_x();break;
case 2: s_y();
}
}
else
s_x();
else
s_y();
minx=-1;
miny=-1;
}
void citire()
{
int i,j,val;
scanf("%d %d %d %d",&M,&N,&R,&C);
for(i=1;i<=M;i++)
{
for(j=1;j<=N;j++)
{
scanf("%d",&val);
S+=val;
matr[0][j]+=val;
matr[i][0]+=val;
matr[i][j] =val;
}
}
}
void rezolvare()
{
int minabs;
while(R!=0 || C!=0)
{
if(C)
afla_y();
if(R)
afla_x();
conditii();
}
}
void afisare()
{
printf("%ld",S);
}
int main()
{
freopen(_in,"r",stdin);
freopen(_out,"w",stdout);
citire();
rezolvare();
afisare();
}