Pagini recente » Cod sursa (job #1204433) | Rating Ghinea alexandru stefan (alexghinea) | Cod sursa (job #246965) | Cod sursa (job #1335197) | Cod sursa (job #1005767)
#include <iostream>
#include <cstdio>
#define MAX_LG 30
#include <algorithm>
using namespace std;
int n, m, r, c, a[MAX_LG][MAX_LG], sume_linii[MAX_LG], sume_coloane[MAX_LG], s_total, com[MAX_LG];
void citire()
{
freopen("elimin.in","r",stdin);
int i, j, s = 0;
scanf("%d %d %d %d", &n, &m, &r, &c);
/*
for( i = 1 ; i <= n ; i++ )
{
s = 0 ;
for( j = 1 ; j <= m ; j++ )
{
scanf("%d", &a[i][j]);
s += a[i][j] ;
s_total += a[i][j] ;
}
sume_linii[i] = s ;
}
*/
if( m<=n )
{
for( i = 1 ; i <= n ; i++ )
{
s = 0 ;
for( j = 1 ; j <= m ; j++ )
{
scanf("%d", &a[i][j]);
s_total += a[i][j] ;
}
}
}
else
{
for( i = 1 ; i <= n ; i++ )
{
for( j = 1 ; j <= m ; j++ )
{
scanf("%d", &a[j][i]);
s_total += a[j][i] ;
}
}
swap(n,m);
swap(r,c);
}
}
void calculeaza_sume_linii()
{
int i , j , s;
for( i = 1; i <= n; i++ )
{
s = 0;
for( j = 1; j <= m; j++)
{
s+=a[i][j];
}
sume_linii[i] = s;
}
}
void calculeaza_sume_coloane()
{
int i, j, s = 0;
for( j = 1 ; j <= m ; j++ )
{
s = 0 ;
for( i = 1 ; i <= n ; i++ )
{
s += a[i][j] ;
}
sume_coloane[j] = s ;
}
}
int elimin(int s_total)
{
int i ,j , v[MAX_LG], k = 0 , aux ;
//elimin coloanele
for( i = 1 ; i <= c ; i++ )
{
s_total -= sume_coloane[com[i]] ;
}
//calculez noile sume de pe linii
//si le pun in vectorul v ;
for( i = 1 ; i <= n ; i++ )
{
aux = sume_linii[i] ;
for( j = 1 ; j <= c ; j++ )
{
aux = aux - a[i][com[j]] ;
}
v[++k] = aux ;
}
sort(v+1,v+n+1) ;
//elmin primele r linii
for( i = 1 ; i <= r ; i++ )
{
s_total -= v[i] ;
}
return s_total ;
}
int s_max = 0 ;
void back( int k , int c )
{
if( k == c + 1 )
{
int aux = elimin(s_total) ;
s_max = max(aux,s_max) ;
}
else
{
int i ;
for( i = com[k-1] + 1 ; i <= m-c+k ; i++ )
{
com[k] = i ;
back(k+1,c) ;
}
}
}
void scrie()
{
freopen("elimin.out", "w", stdout);
printf("%d" , s_max ) ;
}
int main()
{
citire();
calculeaza_sume_coloane();
calculeaza_sume_linii();
back(1,c);
scrie() ;
}