Pagini recente » Cod sursa (job #2871389) | Statistici Cristina (cristina-cri) | Cod sursa (job #504427) | Cod sursa (job #2785298) | Cod sursa (job #504494)
Cod sursa(job #504494)
#include <stdio.h>
#include <algorithm>
#define IN "elimin.in"
#define OUT "elimin.out"
using namespace std;
const int L = 7294;
int R, C, N, M;
int **Mat;
int **mat;
int col[L], Col[L], Lin[L];
int Rez;
int S;
void Read()
{
scanf ("%d %d %d %d", &N, &M, &R, &C);
Mat = (int **)malloc(N * sizeof(int*));
for (int i = 0 ; i < N ; i++)
Mat[i] = (int *)malloc(M * sizeof(int));
for (int i = 0 ; i < N ; i++)
for (int j = 0 ; j < M ; j++)
{
scanf ("%d", &Mat[i][j]);
S += Mat[i][j];
Lin[i] += Mat[i][j];
Col[j] += Mat[i][j];
}
}
void Flip()
{
mat = (int **)malloc(M * sizeof(int*));
for (int i = 0 ; i < M ; i++)
mat[i] = (int *)malloc(N * sizeof(int));
for (int i = 0 ; i < M ; i++)
for (int j = 0 ; j < N ;j++)
mat[i][j] = Mat[j][i];
free(Mat);
Mat = (int **)malloc(N * sizeof(int*));
for (int i = 0 ; i < N ; i++)
Mat[i] = (int *)malloc(M * sizeof(int));
N^=M^=N^=M;
for (int i = 0 ; i < N ; i++)
for (int j = 0 ; j < M ;j++)
Mat[i][j] = mat[j][i];
}
void Check(int P)
{
int S1 = S;
for (int i = 0 ; i < M ; i++)
col[i] = Col[i];
for (int j = 0 ; j < N ;j++)
{
if ((P>>j)&1)
{
S1 -= Lin[j];
for (int i = 0 ; i < M ; i++)
col[i] -= Mat[j][i];
}
}
sort(col, col + M);
for (int i = 0 ; i < C ; i++)
S1 -= col[i];
if (S1 > Rez)
Rez = S1;
}
void Solve()
{
int nr = 0;
for (int i = 0 ; i<(1<<N) ;i++)
{
nr = 0;
for (int j = 0 ; j < N ;j++)
nr += (i>>j)&1;
if (nr == R)
Check(i);
}
printf("%d\n", Rez);
}
int main()
{
freopen (IN, "r", stdin);
freopen (OUT, "w", stdout);
Read();
if (M < N)
Flip();
Solve();
return 0;
}