Pagini recente » Cod sursa (job #1109270) | Cod sursa (job #1160715) | Cod sursa (job #2571473) | Cod sursa (job #785836) | Cod sursa (job #2027168)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
int i, j, n, m, r, c, k, rez, sum, nr, ss[750], s, sl[750], sc[750];
int x[750], v[750][750];
int suma() {
int mins = 0;
for (int i = 1; i <= k; i++)
{
mins += sl[x[i]];
for (j = 1; j <= m; j++)
ss[j] -= v[x[i]][j];
}
sort(ss+1, ss+m+1);
for (i = 1; i <= m; i++)
{
if (i <= c) mins += ss[i];
ss[i] = sc[i];
}
return sum - mins;
}
void back(int p) {
int c;
for (int i = x[p-1] + 1; i <= n; i++)
{
x[p] = i;
if (p == k)
{
c = suma();
if (c > rez) rez = c;
}
else back(p + 1);
}
}
int main () {
fin >> n >> m >> r >> c;
if (n > m)
{
i = n; n = m; m = i;
i = r; r = c; c = i;
for (j = 1; j <= m; j++)
for (i = n; i >= 1; i--)
{
fin >> v[i][j];
sum += v[i][j];
sl[i] += v[i][j];
}
}
else
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
{
fin >> v[i][j];
sum += v[i][j];
sl[i] += v[i][j];
}
for (j = 1; j <= m; j++)
{
for (i = 1; i <= n; i++)
sc[j] += v[i][j];
ss[j] = sc[j];
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= m; j++)
cout << v[i][j] << " ";
cout << "\n";
}
k = r;
back(1);
if (r == 0)
rez = suma();
fout << rez << "\n";
return 0;
}