Pagini recente » Cod sursa (job #292992) | Cod sursa (job #3261483) | Cod sursa (job #801419) | Istoria paginii utilizator/lovechocolate | Cod sursa (job #2561145)
#include <vector>
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
const int NMAX = 8e3 ;
vector < int > a [ NMAX + 5 ] ;
int n , m , r , c , ans , v [ NMAX + 5 ] ;
int config [ 20 ] , tot ;
int getans ( void )
{
int i , j , val = 0 ;
for ( j = 1 ; j <= m ; ++ j )
v [ j ] = 0 ;
for ( i = 1 ; i <= n ; ++ i )
if ( ! config [ i ] )
for ( j = 1 ; j <= m ; ++ j )
v [ j ] += a [ i ] [ j ] ;
sort ( v + 1 , v + m + 1 ) ;
for ( j = c + 1 ; j <= m ; ++ j )
val += v [ j ] ;
return val ;
}
void backt ( int poz )
{
if ( tot == r )
{
ans = max ( ans , getans () ) ;
return ;
}
if ( poz == n + 1 )
return ;
config [ poz ] = 1 ; ++ tot ;
backt ( poz + 1 ) ;
-- tot ; config [ poz ] = 0 ;
backt ( poz + 1 ) ;
}
int main()
{
ifstream in ( "elimin.in" ) ;
ofstream out ( "elimin.out" ) ;
int i , j ;
in >> n >> m >> r >> c ;
if ( n < m )
{
for ( i = 1 ; i <= n ; ++ i )
a [ i ].assign ( m + 5 , 0 ) ;
for ( i = 1 ; i <= n ; ++ i )
for ( j = 1 ; j <= m ; ++ j )
in >> a [ i ] [ j ] ;
}
else
{
for ( i = 1 ; i <= m ; ++ i )
a [ i ].assign ( n + 5 , 0 ) ;
for ( i = 1 ; i <= n ; ++ i )
for ( j = 1 ; j <= m ; ++ j )
in >> a [ j ] [ i ] ;
swap ( n , m ) ;
}
backt ( 1 ) ;
out << ans ;
return 0;
}