Pagini recente » Cod sursa (job #709509) | Cod sursa (job #1316385) | Cod sursa (job #1910341) | Cod sursa (job #2084926) | Cod sursa (job #1010111)
#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
{
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);
}
}
inline void Print(int st[])
{
//memcpy(sum,Slin,sizeof(Slin));
//memset(sum,0,sizeof(sum));
for(int i=1;i<=M;++i)
{
sum[i]=Slin[i];
for(int j=1;j<=C;++j)sum[i]-=a[i][st[j]];
}
//for(int j=1;j<=C;++j)
// for(int i=1;i<=M;++i)sum[i]-=a[i][st[j]];
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)
{
st[k]=i;
Back(k+1);
}
}
int main()
{
ReadInput();
Back(1);
g<<S<<'\n';
f.close();g.close();
return 0;
}