Pagini recente » Cod sursa (job #1244106) | Cod sursa (job #1742041) | Cod sursa (job #1333320) | Cod sursa (job #1560719) | Cod sursa (job #955759)
Cod sursa(job #955759)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
short 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 Calculare2()
{
long sum = 0;
for(int i=1; i<=n; i++)
{
long s = 0;
for(int j=1; j<=m; j++)
if(!car[j]) s += a[i][j];
sol.push_back(s);
sum += s;
}
nth_element(sol.begin(), sol.begin()+r, sol.end());
for(int i=0; i<r; 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;
if(n <= m)
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
fin>>a[i][j];
else{
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
fin>>a[j][i];
swap(m,n);
swap(r,c);
}
Back(1);
fout<<maxim;
return 0;
}