Pagini recente » Cod sursa (job #373215) | Cod sursa (job #2205643) | Cod sursa (job #286355) | Cod sursa (job #377552) | Cod sursa (job #1674639)
#include <fstream>
#include <algorithm>
#include <string.h>
#define sum first
#define poz second
using namespace std;
ifstream f("elimin.in");
ofstream g("elimin.out");
int n, m, l, c, x, s_col[7300], v[20], s[73000];
long long sumMax, newSum;
short a[20][7300];
void aflu_solutie()
{
newSum = 0;
memset(s, 0, sizeof(s));
for(int i = 1; i <= l; ++i)
for(int j = 1; j <= m; ++j){
s[j]+= a[v[i]][j];
}
for(int i = 1; i <= m; ++i)
s[i] = s_col[i] - s[i];
sort(s + 1, s + m + 1);
for(int i = c + 1; i <= m; ++i)
newSum += s[i];
if(newSum > sumMax) sumMax = newSum;
}
void make_bkt(int k){
for(int i = v[k - 1] + 1; i <= n; ++i){
v[k] = i;
if(k == l) aflu_solutie();
else make_bkt(k + 1);
}
}
int main()
{
f >> n >> m >> l >> c;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j){
f >> x;
if(n <= m){
a[i][j] = x;
s_col[j] += x;
}
else {
a[j][i] = x;
s_col[i] += x;
}
}
if(n > m) swap(n ,m), swap(l, c);
make_bkt(1);
g << sumMax;
return 0;
}