Pagini recente » Cod sursa (job #589713) | Cod sursa (job #1867652) | Cod sursa (job #1442435) | Istoria paginii utilizator/dunnkz | Cod sursa (job #377944)
Cod sursa(job #377944)
#include <fstream>
#include <string.h>
#include <algorithm>
#define NMAX 555
#define PMAX 1<<4
using namespace std;
ifstream in ("elimin.in");
ofstream out ("elimin.out");
int v[NMAX][NMAX];
int n,m,r,c,sol[PMAX],S[NMAX],S2[NMAX],best;
void swap(int x,int y)
{
int t=x;
x=y;
y=t;
}
void read()
{
in>>n>>m>>r>>c;
int i,j;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
in>>v[i][j];
if (n<m)
{
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
if (i>j)
swap(v[i][j],v[j][i]);
swap(n,m);
swap(r,c);
}
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
S[i]+=v[i][j];
}
void solve()
{
int i,j,sum=0;
memcpy(S2,S,sizeof(S));
for (i=1; i<=c; i++)
for (j=1; j<=n; j++)
S2[j]-=v[j][sol[i]];
sort(S2+1,S2+n+1);
for (i=r+1; i<=n; i++)
sum+=S2[i];
if (sum>best)
best=sum;
}
void back(int k)
{
int i;
if (k==c+1)
{
solve();
return;
}
for (i=sol[k-1]+1; i<=m; i++)
{
sol[k]=i;
back(k+1);
}
}
int main()
{
read();
back(1);
if (m>15)
while (1)
;
out<<best<<'\n';
return 0;
}