Pagini recente » Cod sursa (job #3032900) | Cod sursa (job #2964398) | Cod sursa (job #748419) | Cod sursa (job #775760) | Cod sursa (job #1642032)
#include <bits/stdc++.h>
using namespace std;
int suma_matrice, s_linie[7300], s_coloana[20];
int n, m, r, c, a[7300][20];
int suma_coloane, suma_linii;
void Citire()
{
int i, j;
ifstream fin("elimin.in");
fin >> n >> m >> r >> c;
if(n > m)
{
for(i = 1; i <= n; i++)
for(j = 1; j <= m; j++)
fin >> a[i][j];
}
else
{
for(i = 1; i <= n; i++)
for(j = 1; j <= m; j++)
fin >> a[j][i];
swap(n, m);
swap(r, c);
}
}
void Precalculari()
{
int i, j;
suma_matrice = 0;
for(i = 1; i <= n; i++)
for(j = 1; j <= m; j++)
{
suma_matrice += a[i][j];
s_coloana[j] += a[i][j];
}
}
void Generare()
{
int q, nr, nr_col, sol = 0, i, j;
nr = (1 << m);
for (q = 0; q < nr; q++)
{
nr_col=0;
for(j = 0; j < m; j++)
if(q & (1<<j))
nr_col++;
if(nr_col == c)
{
suma_coloane = 0;
suma_linii = 0;
for(i = 1; i <= n; i++)
s_linie[i] = 0;
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
if (q & (1 << (j - 1)))
suma_coloane += a[i][j];
else
s_linie[i] += a[i][j];
sort(s_linie+1, s_linie+n+1);
for (i=1; i<=r; i++)
suma_linii += s_linie[i];
if (suma_matrice-suma_coloane-suma_linii > sol)
sol = suma_matrice - suma_coloane - suma_linii;
}
}
ofstream fout("elimin.out");
fout<< sol << "\n";
}
int main()
{
Citire();
Precalculari();
Generare();
return 0;
}