Pagini recente » Cod sursa (job #1687600) | Cod sursa (job #3341763) | Cod sursa (job #3306842) | Cod sursa (job #1642472) | Cod sursa (job #3303277)
#include <bits/stdc++.h>
using namespace std;
ifstream f("elimin.in");
ofstream g("elimin.out");
int n,m,r,c;
int Smax;
vector<vector<int>>v;
int nrbiti(unsigned long long k)
{
int nrb=0;
while(k)
{
nrb+=(k&1);
k>>=1;
}
return nrb;
}
void solve(int Sog)
{
if(n>m)
{
for(unsigned long long k=0;k<=(1<<(m-1));k++) //ne fixam o submultime de coloane pe care le stergem
{
if(nrbiti(k)==c)
{
vector<int>w;
int S=Sog;
for(int i=0;i<n;i++)
{
int sl=0;
for(int j=0;j<m;j++)
{
if( k & (1<<j) )
S-=v[i][j];
else
sl+=v[i][j];
}
w.push_back(sl);
}
sort(w.begin(),w.end());
for(int i=0;i<r;i++)
S-=w[i];
Smax=max(Smax,S);
}
}
}
else
{
for(unsigned long long k=0;k<=(1<<(n-1));k++) //ne fixam o submultime de linii pe care le stergem
{
if(nrbiti(k)==r)
{
vector<int>w;
int S=Sog;
for(int j=0;j<m;j++)
{
int sc=0;
for(int i=0;i<m;i++)
{
if( k & (1<<i) )
S-=v[i][j];
else
sc+=v[i][j];
}
w.push_back(sc);
}
sort(w.begin(),w.end());
for(int i=0;i<c;i++)
S-=w[i];
Smax=max(Smax,S);
}
}
}
g<<Smax;
}
int main()
{
int Sog=0;
f>>n>>m>>r>>c;
for(int i=0;i<n;i++)
{
vector <int> nou;
v.push_back(nou);
for(int j=0;j<m;j++)
{
int x=0;
f>>x;
v[i].push_back(x);
Sog+=x;
}
}
solve(Sog);
return 0;
}