Pagini recente » Cod sursa (job #512599) | Cod sursa (job #235652) | Cod sursa (job #1039941) | Cod sursa (job #2115524) | Cod sursa (job #1635031)
#include <fstream>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
int main()
{
static int c[7300][7300], sum, ran,tot=0, col, difc, m[7300][7300], b[7300][7300], mxi, mxj, maxi, maxj, max, n1, n2, c1, c2, nrc;
fin >> n1 >> n2 >> c1 >> c2;
difc = c1 - c2;
if (difc<0)
{
nrc = 2;
difc = -difc;
}
else nrc = 1;
for (int i = 1; i <= n1; i++)
{
for (int j = 1; j <= n2; j++)
{
fin >> m[i][j];
m[0][j] += m[i][j];
m[i][0] += m[i][j];
tot += m[i][j];
}
}
max = m[0][1] + m[1][0] - m[1][1];
for (int i = 1; i <= n1; i++)
{
for (int j = 1; j <= n2; j++)
{
b[i][j] = m[0][j] + m[i][0] - m[i][j];
if (b[i][j]<max)
{
max = b[i][j];
maxi = i;
maxj = j;
}
}
}
ran = maxi;
col = maxj;
sum = max;
for (int i = 1; i <= n1; i++)
{
c[i][maxj] += 1;
}
for (int i = 1; i <= n2; i++)
{
c[maxi][i] += 1;
}
for (int k = 1; k <= difc; k++)
{
for (int i = 1; i <= n1; i++)
{
for (int j = 1; j <= n2; j++)
{
if (c[i][j] == 0)
{
b[i][j] -= (m[maxi][j] + m[i][maxj]);
if (b[i][j]<max)
{
max = b[i][j];
mxi = i;
mxj = j;
}
}
}
}
maxi = mxi;
maxj = mxj;
for (int i = 1; i <= n1; i++)
{
c[i][maxj] += 1;
m[i][0] -= m[i][maxj];
}
for (int i = 1; i <= n2; i++)
{
c[maxi][i] += 1;
m[0][i] -= m[maxi][i];
}
sum += max;
max = 233600000;
}
if (c1>c2)
{
for (int k = c2; k <= c1; k++)
for (int i = 1; i <= n1; i++)
{
for (int j = 1; j <= n2; j++)
{
if (c[i][j] == 1)
{
b[i][j] = m[0][j] - m[i][j];
if (b[i][j]<max)
{
max = b[i][j];
mxi = i;
mxj = j;
}
}
}
}
maxi = mxi;
maxj = mxj;
sum += max;
max = 233600000;
for (int i = 1; i <= n1; i++)
{
c[i][maxj] += 1;
m[i][0] -= m[i][maxj];
}
}
if (c1<c2)
{
for (int k = c1; k <= c2; k++)
for (int i = 1; i <= n1; i++)
{
for (int j = 1; j <= n2; j++)
{
if (c[i][j] == 1)
{
b[i][j] = m[i][0] - m[i][j];
if (b[i][j]<max)
{
max = b[i][j];
mxi = i;
mxj = j;
}
}
}
}
maxi = mxi;
maxj = mxj;
sum += max;
max = 233600000;
for (int i = 1; i <= n2; i++)
{
c[i][maxj] += 1;
m[0][i] -= m[maxi][i];
}
}
fout << tot-sum;
}