Pagini recente » Cod sursa (job #205102) | Cod sursa (job #1315134) | Cod sursa (job #837392) | Cod sursa (job #681248) | Cod sursa (job #77104)
Cod sursa(job #77104)
#include <stdio.h>
#define infile "elimin.in"
#define outfile "elimin.out"
#define nmax 400
#define inf 999999999
long v[nmax][nmax], n, m, r, c, i, j;
long rez, linii[nmax], coloane[nmax];
void readdata();
void writedata();
void solve();
int main()
{
readdata();
solve();
writedata();
return 0;
}
void readdata()
{
freopen(infile, "r", stdin);
scanf("%ld %ld %ld %ld\n", &n, &m, &r, &c);
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
{
scanf("%ld ", &v[i][j]);
rez+=v[i][j];
linii[i]+=v[i][j];
coloane[j]+=v[i][j];
}
fclose(stdin);
}
void writedata()
{
freopen(outfile, "w", stdout);
printf("%ld", rez);
fclose(stdout);
}
void solve()
{
int k, x, y;
long min;
for (k=r<c?r:c; k>0; k--, c--, r--)
{
min=inf;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
{
if (linii[i]+coloane[j]-v[i][j]<min)
{
x=i;
y=j;
min=linii[i]+coloane[j]-v[i][j];
}
}
rez-=min;
for (i=1; i<=n; i++)
{
linii[i]-=v[i][y];
v[i][y]=0;
}
for (i=1; i<=m; i++)
{
coloane[i]-=v[x][i];
v[x][i]=0;
}
linii[x]=coloane[y]=inf;
}
for ( ; c; c--)
{
min=inf;
for (i=1; i<=m; i++)
if (coloane[i]<min)
{
min=coloane[i];
y=i;
}
rez-=coloane[y];
coloane[y]=inf;
}
for ( ; r; r--)
{
min=inf;
for (i=1; i<=n; i++)
if (linii[i]<min)
{
min=linii[i];
x=i;
}
rez-=linii[x];
linii[x]=inf;
}
}