Pagini recente » Cod sursa (job #2136651) | Cod sursa (job #345617) | Cod sursa (job #2840855) | Cod sursa (job #2663198) | Cod sursa (job #65686)
Cod sursa(job #65686)
#include <stdio.h>
#include <algorithm>
#define nmax 1001
using namespace std;
int b[nmax][nmax],a[nmax][nmax],rez = 0,n,m,i,j,r,c,d[nmax],aux[nmax];
void inversare() {
for(int i = 1; i <= m; i++)
for(int j = 1; j <= n; j++) b[j][m - i + 1] = a[i][j];
n ^= m ^= n ^= m; r ^= c ^= r ^= c;
for(int i = 1; i <= m; i++)
for(int j = 1; j <= n; j++)
a[i][j] = b[i][j];
}
void baga() {
d[0] = 0;
for(int j = 1; j <= n; j++) {
int sum = 0;
for(int i = 1; i <= m; i++)
if(aux[i] == 0) sum += a[i][j];
d[++d[0]] = sum;
}
sort(d + 1,d + d[0]);
int sum = 0;
for(int i = c + 1; i <= d[0]; i++) sum += d[i];
if(sum > rez) rez = sum;
}
void back(int x,int p) {
if(p > r) return ;
for(int i = 0; i < 2; i++) {
aux[x] = i;
if(x == m) {
if(p + aux[x] == r) baga();
}
else back(x + 1,p + aux[x]);
}
}
int main() {
freopen("elimin.in","r",stdin);
freopen("elimin.out","w",stdout);
scanf("%d%d%d%d",&m,&n,&r,&c);
for(i = 1; i <= m; i++)
for(j = 1; j <= n; j++)
scanf("%d",&a[i][j]);
if(m > n) inversare();
back(1,0);
printf("%d\n",rez);
return 0;
}