Pagini recente » Cod sursa (job #773050) | Cod sursa (job #2260098) | Cod sursa (job #6743) | Cod sursa (job #190989) | Cod sursa (job #2810648)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
/// T1 - 32 = 2 ^ 5;
/// T2 - 50 = 2 ^ 1 * 5 ^ 2;
/// T3 - 100 = 2 ^ 2 * 5 ^ 2;
/// T4 - 266 = 2 ^ 1 * 7 ^ 1 * 19 ^ 1;
/// T5 - 539 = 7 ^ 2 * 11 ^ 1;
/// T6 - 1630 = 2 ^ 1 * 5 ^ 1 * 163 ^ 1;
/// T7 - 3495 = 3 ^ 1 * 5 ^ 1 * 233 ^ 1;
/// T8 - 3653 = 13 ^ 1 * 281 ^ 1;
/// T9 - 5866 = 2 ^ 1 * 7 ^ 1 * 419 ^ 1;
/// T10 - 7294 = 2 ^ 1 * 7 ^ 1 * 521 ^ 1;
int n, m, nlin, ncol;
int mat[550][550], sum, temp[550], sol[25];
int ans;
void citire()
{
fin >> n >> m >> nlin >> ncol;
nlin = n - nlin;
ncol = n - ncol;
if (n <= m)
{
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
fin >> mat[i][j];
}
else
{
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
fin >> mat[j][i];
swap(n, m);
swap(nlin, ncol);
}
}
void check()
{
sum = 0;
for(int i = 1; i <= nlin; i++)
{
int lin = sol[i];
for(int j = 1; j <= m; j++)
{
if(i == 1)
temp[j] = 0;
temp[j] += mat[lin][j];
}
}
sort(temp + 1, temp + m + 1);
for(int i = m - ncol + 1; i <= m; i++)
sum += temp[i];
ans = max(ans, sum);
}
void bkt(int k)
{
for(int i = sol[k - 1] + 1; i <= n; i++)
{
sol[k] = i;
if(k == nlin)
check();
else
bkt(k + 1);
}
}
int main()
{
citire();
bkt(1);
fout << ans;
return 0;
}