Pagini recente » Cod sursa (job #1841788) | Cod sursa (job #903204) | Cod sursa (job #845269) | Cod sursa (job #381822) | Cod sursa (job #1727622)
#include <bits/stdc++.h>
using namespace std;
const int M_max = 20;
const int N_max = 7300;
int A[M_max][N_max], sol[M_max], s[N_max], Max;
bool GASIT;
int M, N, R, C;
inline void read()
{
ifstream f("elimin.in");
int i, j;
f >> M >> N >> R >> C;
if(M <= N)
for(i = 1; i <= M; i++)
for(j = 1; j <= N; j++) f >> A[i][j];
else
{
swap(M, N);
swap(R, C);
for(j = 1; j <= N; j++)
for(i = 1; i <= M; i++) f >> A[i][j];
}
f.close();
}
inline void prelucrare()
{
int i, j, k, S = 0;
for(j = 1; j <= N; j++) s[j] = 0;
for(j = 1; j <= N; j++)
{
k = 1;
for(i = 1; i <= M; i++)
{
if(i != sol[k])
s[j] += A[i][j];
else
k++;
}
}
sort(s + 1, s + N + 1);
for(j = C + 1; j <= N; j++) S += s[j];
if(!GASIT)
{
Max = S;
GASIT = true;
}
else
if(Max < S) Max = S;
}
inline void bkt(int p)
{
if(p == R + 1) prelucrare();
else
for(int i = 1 + sol[p - 1]; i <= M - R + p; i++)
{
sol[p] = i;
bkt(p + 1);
}
}
int main()
{
read();
bkt(1);
ofstream g("elimin.out");
g << Max << "\n";
g.close();
return 0;
}