Pagini recente » Cod sursa (job #1568792) | Cod sursa (job #3239508) | Cod sursa (job #1490914) | Cod sursa (job #3149336) | Cod sursa (job #65698)
Cod sursa(job #65698)
#include <stdio.h>
//#include <algorithm>
#define nmax 10005
using namespace std;
short int a[16][nmax];
int rez = 0,n,m,i,j,r,c,d[nmax],aux[20],sum = 0;
void baga() {
return ;
d[0] = 0;
for(int j = 1; j <= n; j++) {
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]);
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);
if(n < m) {
for(i = 1; i <= m; i++)
for(j = 1; j <= n; j++) {
if(j >= 16) for(;;);
if(m - i + 1 >= nmax) for(;;);
scanf("%d",a[j][m - i + 1]);
}
n ^= m ^= n ^= m; r ^= c ^= r ^= c;
}
else {
for(i = 1; i <= m; i++)
for(j = 1; j <= n; j++)
scanf("%d",&a[i][j]);
}
return 0;
back(1,0);
printf("%d\n",rez);
return 0;
}