Pagini recente » Cod sursa (job #864600) | Cod sursa (job #2745987) | Cod sursa (job #2980055) | Cod sursa (job #2971662) | Cod sursa (job #1012211)
#include <iostream>
#include <fstream>
#include <algorithm>
#define sz 700
#define infinit 1<<31
using namespace std;
int matrix[sz][sz];
int sline[sz],sMax=(-1)*infinit;
bool include[sz];
int n,m,r,c,smatrix=0;
ifstream in("elimin.in");
ofstream out("elimin.out");
void read()
{
in>>n>>m>>r>>c;
if(n<m)
{
for(int i=1; i<=n ; i++)
{
for(int j=1 ; j<=m ; j++)
{
in>>matrix[j][i];
smatrix+=matrix[j][i];
}
}
swap(n,m);
swap(r,c);
}
else
{
for(int i=1 ; i<=n ; i++)
{
for(int j=1; j<=m ; j++)
{
in>>matrix[i][j];
}
}
}
}
void setSum()
{
for(int i=1; i<=n; i++)
{
sline[i]=0;
}
}
void bk()
{
int b=1;
for(int i=1; i<(1<<m) ; i++)
{
int bytes=0;
for(int j=0; (1<<j)<=i ;j++)
{
if( ((1<<j)&i) != 0)
{
include[j+1]=1;
bytes++;
}
else
{
include[j+1]=0;
}
}
if(bytes==c)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(include[j]==0)
{
sline[i]=sline[i]+matrix[i][j];
}
if(include[j+1]==1)
{
j++;
}
}
}
sort(sline +1 , sline + n + 1);
int sum=0;
for(int i=r+1;i<=n;i++)
{
sum=sum+sline[i];
}
setSum();
if(sum>sMax)
{
sMax=sum;
}
}
}
}
void write()
{
out<<sMax;
}
int main()
{
read();
bk();
write();
}