Pagini recente » Cod sursa (job #1727754) | Cod sursa (job #806942) | Cod sursa (job #558331) | Cod sursa (job #869824) | Cod sursa (job #1036088)
#include <fstream>
#include <string.h>
#include <algorithm>
#define in "elimin.in"
#define out "elimin.out"
#define Max_Size 7300
std :: ifstream f(in);
std :: ofstream g(out);
int N, M, R, C, Best_Sum;
short A[Max_Size][Max_Size];
inline void Read_Data()
{
f >> N >> M >> R >> C;
if(N <= M)
for(int i = 1; i <= N; ++i)
for(int j = 1; j <= M; ++j)
f >> A[i][j];
else
{
for(int i = 1; i <= N; ++i)
for(int j = 1; j <= M; ++j)
f >> A[j][i];
std :: swap(N, M);
std :: swap(R, C);
}
}
inline void Solve()
{
int sum[Max_Size];
short is[Max_Size];
for(int k = 0; k < (1 << N); ++k)
{
int nr_l = 0;
for(int j = 1; j <= N; ++j)
if((1 << j) & k) is[j] = 1;
else is[j] = 0, ++nr_l;
int my_sum = 0;
if(nr_l == R)
{
memset(sum, 0, sizeof(sum));
for(int i = 1; i <= N; ++i)
for(int j = 1; j <= M; ++j)
sum[j] += A[i][j] * is[i];
std :: sort(sum + 1, sum + M + 1);
for(int i = M; i > C; --i) my_sum += sum[i];
Best_Sum = std :: max(Best_Sum, my_sum);
}
}
}
int main()
{
Read_Data();
Solve();
g << Best_Sum << '\n';
g.close();
return 0;
}