Pagini recente » Cod sursa (job #698438) | Cod sursa (job #2271670) | Cod sursa (job #2071703) | Cod sursa (job #1020634) | Cod sursa (job #3217986)
#include <fstream>
#include <vector>
#include <bitset>
#include <algorithm>
using namespace std;
ifstream fin ("elimin.in");
ofstream fout ("elimin.out");
vector <vector <int>> v;
int maxim,i,j,n,m,l,c,fr[7295];
bitset <7295> viz;
void f (int pas,int ant)
{
if (n-ant<l-pas+1)
return ;
if (pas==l+1)
{
int sum=0;
for (int j=1; j<=m; j++)
fr[j]=0;
for (int i=1; i<=n; i++)
{
if (viz[i])
continue;
for (int j=1; j<=m; j++)
fr[j]+=v[i][j];
}
sort (fr+1,fr+m+1);
for (int j=c+1; j<=m; j++)
sum+=fr[j];
if (sum>maxim)
maxim=sum;
}
else
{
for (int i=ant+1; i<=n; i++)
{
f (pas,i);
viz[i]=1;
f (pas+1,i);
viz[i]=0;
}
}
}
int main()
{
fin>>n>>m>>l>>c;
if (n<=m)
{
v.resize (n+1,vector <int> (m+1,0));
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
fin>>v[i][j];
}
}
else
{
v.resize (m+1,vector <int> (n+1,0));
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
fin>>v[j][i];
}
swap (n,m);
}
f (1,0);
fout<<maxim;
return 0;
}