Pagini recente » Cod sursa (job #549374) | Cod sursa (job #2989895) | Cod sursa (job #2813237) | Cod sursa (job #1805512) | Cod sursa (job #2236672)
#include <cstdio>
#include <algorithm>
using namespace std;
int m, n, r, c, dus,
a[522][522], x[16], o[522];
int sum[522], maxSum;
inline bool cmp(short a, short b) {
return sum[a] < sum[b];
}
void check() {
nth_element(o+1, o+r+1, o+m+1, cmp);
int s = 0;
for(int i = r+1; i <= m; i++)
s += sum[o[i]];
if(s > maxSum)
maxSum = s;
}
void bt(int k) { // combinari de n luate cate c;
if(k <= c) {
for(int i = x[k-1]+1; i <= n; i++) {
x[k] = i;
for(int j = 1; j <= m; j++)
sum[j] -= a[j][x[k]];
bt(k+1);
for(int j = 1; j <= m; j++)
sum[j] += a[j][x[k]];
x[k] = 0;
}
} else check();
}
int main()
{
freopen("elimin.in", "r", stdin);
freopen("elimin.out", "w", stdout);
scanf("%hi %hi %hi %hi", &m, &n, &r, &c);
if(m < n) {
for(int i = 1; i <= m; i++)
for(int j = 1; j <= n; j++)
scanf("%hi", &a[j][i]);
swap(m, n); swap(r, c);
} else {
for(int i = 1; i <= m; i++)
for(int j = 1; j <= n; j++)
scanf("%hi", &a[i][j]);
}
for(int i = 1; i <= m; i++) {
o[i] = i;
for(int j = 1; j <= n; j++)
sum[i] += a[i][j];
}
bt(1);
printf("%hi", maxSum);
return 0;
}