Pagini recente » Cod sursa (job #1831784) | Cod sursa (job #2251336) | Cod sursa (job #1389313) | Cod sursa (job #1179861) | Cod sursa (job #3125957)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
struct parcurgere {
int b;
int e;
int pas;
};
const int N_MAX = 15;
const int M_MAX = 7294;
short m[N_MAX][M_MAX];
int sum[M_MAX];
parcurgere row, column;
int main() {
int rows, columns, rowselim, columnselim;
fin >> rows >> columns >> rowselim >> columnselim;
row.b = 0;
row.e = rows;
row.pas = 1;
column.b = 0;
column.e = columns;
column.pas = 1;
if(rows <= N_MAX)
for(int r = 0; r < rows; ++r)
for(int c = 0; c < columns; ++c)
fin >> m[r][c];
else{
for(int r = 0; r < rows; ++r)
for(int c = columns - 1; c >= 0; --c)
fin >> m[c][r];
row.b = columns - 1;
row.e = -1;
row.pas = -1;
column.e = rows;
swap(rows, columns);
}
int summax = 0, sumtotal;
for(int i = 0; i < (1 << rows); ++i)
if(__builtin_popcount(i) == rowselim){
for(int c = column.b; c != column.e; c += column.pas)
sum[c] = 0;
for(int r = row.b; r != row.e; r += row.pas)
if(!(i & (1 << r)))
for(int c = column.b; c != column.e; c += column.pas)
sum[c] += m[r][c];
sort(sum, sum + abs(column.e - column.b));
sumtotal = 0;
for(int j = columnselim; j < abs(column.e - column.b); ++j)
sumtotal += sum[j];
if(sumtotal > summax)
summax = sumtotal;
}
fout << summax << '\n';
fin.close();
fout.close();
return 0;
}