Pagini recente » Cod sursa (job #1078050) | Cod sursa (job #2770452) | Cod sursa (job #550789) | Cod sursa (job #392075) | Cod sursa (job #1010104)
#include <fstream>
#include <algorithm>
#include <string.h>
#define Mmax 7305
#define Nmax 17
using namespace std;
ifstream f("elimin.in");
ofstream g("elimin.out");
int N,M,R,C,a[Mmax][Nmax],st[Nmax],used[Nmax],S,Slin[Mmax],sum[Mmax];;
inline void ReadInput()
{
f>>M>>N>>R>>C;
if(M>=N)
{
for(int i=1;i<=M;++i)
for(int j=1;j<=N;++j)f>>a[i][j],Slin[i]+=a[i][j];
}
else //if(M<N) fac coloanele linii
{
for(int i=1;i<=M;++i)
for(int j=1;j<=N;++j)f>>a[j][i],Slin[j]+=a[j][i];
swap(M,N);
swap(R,C);
}
//for(int i=1;i<=M;++i,g<<'\n')
//for(int j=1;j<=N;++j)g<<a[i][j]<<' ';
}
inline void Print(int st[])
{
//memcpy(sum,Slin,sizeof(Slin));
memset(sum,0,sizeof(sum));
for(int j=1;j<=C;++j)
for(int i=1;i<=M;++i)sum[i]-=a[i][st[j]];
for(int i=1;i<=M;++i)sum[i]+=Slin[i];
sort(sum+1,sum+1+M);
int sol=0;
for(int i=R+1;i<=M;++i)sol+=sum[i];
if(sol>S)S=sol;
}
void Back(int k)
{
if(k==C+1){Print(st);return;}
for(int i=st[k-1]+1;i<=N;++i)
if(!used[i])
{
st[k]=i; used[i]=1;
Back(k+1);
used[i]=0;
}
}
int main()
{
ReadInput();
Back(1);
g<<S<<'\n';
f.close();g.close();
return 0;
}