Pagini recente » Cod sursa (job #611784) | Cod sursa (job #676320) | Cod sursa (job #2635974) | Cod sursa (job #332534) | Cod sursa (job #955728)
Cod sursa(job #955728)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
int n, m, r, c, a[700][700];
long maxim;
vector <long> sol;
bool car[700];
void Calculare()
{
long sum = 0;
for(int j=1; j<=m; j++)
{
long s = 0;
for(int i=1; i<=n; i++)
if(!car[i]) s += a[i][j];
sol.push_back(s);
sum += s;
}
nth_element(sol.begin(), sol.begin()+c, sol.end());
for(int i=0; i<c; i++)
sum -= sol[i];
sol.clear();
if(maxim < sum) maxim = sum;
}
void Back(int k)
{
if(k == r+1) Calculare();
else
for(int j=1; j<=n; j++)
if(!car[j])
{
car[j] = 1;
Back(k+1);
car[j] = 0;
}
}
int main()
{
fin>>n>>m>>r>>c;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
fin>>a[i][j];
Back(1);
fout<<maxim;
return 0;
}