Mai intai trebuie sa te autentifici.
Cod sursa(job #2015399)
Utilizator | Data | 26 august 2017 00:04:29 | |
---|---|---|---|
Problema | Elimin | Scor | 60 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.26 kb |
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
long long i, j, n, m, r, c, k, rez, sum, ss[7300];
int x[7300], v[7300][7300];
long long suma() {
long long mins = 0;
for (int i = 1; i <= k; i++)
{
v[x[i]][0] = 1;
for (j = 1; j <= m; j++)
mins += v[x[i]][j];
}
long long s = 0;
for (j = 1; j <= m; j++)
{
s = 0;
for (i = 1; i <= n; i++)
if (v[i][0] == 0)
s += v[i][j];
ss[j] = s;
}
sort(ss+1, ss+m+1);
for (i = 1; i <= c; i++)
mins += ss[i];
for (i = 1; i <= n; i++)
v[i][0] = 0;
return sum - mins;
}
void back(int p) {
long long 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;
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
{
fin >> v[i][j];
sum += v[i][j];
}
k = r;
back(1);
fout << rez << "\n";
return 0;
}