Pagini recente » Cod sursa (job #554649) | Cod sursa (job #1169920) | Cod sursa (job #2241646) | Cod sursa (job #2137339) | Cod sursa (job #1366070)
#include <stdio.h>
#define MAXN 15
#define MAXM 7294
int ma[MAXN][MAXM], max = 0;
int n, m, l, c;
int sum[MAXM];
char v[MAXN];
void qs(int st, int dr){
int i = st, j = dr, piv = sum[(st + dr) / 2], aux;
while(i <= j){
while(sum[i] > piv)
i++;
while(sum[j] < piv)
j--;
if(i <= j){
aux = sum[i];
sum[i] = sum[j];
sum[j] = aux;
i++;
j--;
}
}
if(st < j)
qs(st, j);
if(i < dr)
qs(i, dr);
}
inline void solve(){
int i, j;
for(i = 0; i < m; i++)
sum[i] = 0;
for(i = 0; i < n; i++){
for(j = 0; j < m; j++){
if(!v[i])
sum[j] += ma[i][j];
}
}
qs(0, m - 1);
int sc = 0;
for(i = 0; i < m - c; i++)
sc += sum[i];
if(max < sc)
max = sc;
}
void bkt(int pas, int poz){
if(pas == l){
solve();
}
else{
int i;
for(i = poz; i < n; i++){
v[i] = 1;
bkt(pas + 1, i + 1);
v[i] = 0;
}
}
}
int main(){
FILE *in = fopen("elimin.in", "r");
int i, j, aux;
fscanf(in, "%d%d%d%d", &n, &m, &l, &c);
if(m <= MAXN){
for(i = 0; i < n; i++){
for(j = 0; j < m; j++){
fscanf(in, "%d", &ma[j][i]);
}
}
aux = m;
m = n;
n = aux;
}
else{
for(i = 0; i < n; i++){
for(j = 0; j < m; j++){
fscanf(in, "%d", &ma[i][j]);
}
}
}
bkt(0, 0);
FILE *out = fopen("elimin.out", "w");
fprintf(out, "%d", max);
fclose(out);
return 0;
}