Pagini recente » Cod sursa (job #1234629) | Profil StefaniaIrina | Cod sursa (job #212422) | Cod sursa (job #2141071) | Cod sursa (job #1466413)
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define MAX_N 17
#define MAX_M 7294
short a[MAX_M][MAX_N];
int sum[MAX_M];
inline void __swap(int *x, int *y) {
int tmp = *x;
*x = *y;
*y = tmp;
}
inline int popCnt(int q) {
int ans = 0;
do {
ans++;
q &= (q - 1);
} while (q);
return ans;
}
int main(void) {
FILE *f = fopen("elimin.in", "r");
int n, m, r, c;
int ans, tmp;
fscanf(f, "%d%d%d%d", &n, &m, &r, &c);
if (n <= m) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
fscanf(f, "%hd", &a[j][i]);
}
}
} else {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
fscanf(f, "%hd", &a[i][j]);
}
}
__swap(&n, &m);
__swap(&r, &c);
}
fclose(f);
ans = 0;
for (int q = (1 << n) - 1; q >= 0; q--) {
if (popCnt(q) == r) {
memset(sum, 0, sizeof(sum));
for (int i = 0; i < n; i++) {
if (!(q & (1 << i))) {
for (int j = 0; j < m; j++) {
sum[j] += a[j][i];
}
}
}
std::sort(sum, sum + m);
tmp = 0;
for (int i = c; i < m; i++) {
tmp += sum[i];
}
if (tmp > ans) {
ans = tmp;
}
}
}
f = fopen("elimin.out", "w");
fprintf(f, "%d\n", ans);
fclose(f);
return 0;
}