Pagini recente » Cod sursa (job #298890) | Cod sursa (job #2800248) | Monitorul de evaluare | Cod sursa (job #1269060) | Cod sursa (job #2537571)
#include <bits/stdc++.h>
#define Nmax 5005
using namespace std;
ifstream fin ( "rucsac.in" );
ofstream fout ( "rucsac.out" );
struct obiect
{
int g, p;
};
void read ( );
void solve ( );
int calculez ( int i, int g );
inline bool cmp ( obiect &a, obiect &b );
obiect v[Nmax];
int n, g;
int main ( )
{
read ( );
solve ( );
}
void solve ( )
{
int p, P = 0;
sort ( v+1, v+n+1, cmp );
for ( int i = 1; i <= n; i++ )
{
if ( g < v[i].g )
continue;
p = v[i].p;
p += calculez ( i+1, g-v[i].g );
if ( P < p )
P = p;
}
fout << P;
}
int calculez ( int i, int g )
{
if ( g == 0 )
return 0;
else if ( i == n+1 )
return 0;
while ( v[i].g > g )
i++;
int x = 0;
for (; i <= n; i++ )
x = max ( x, calculez ( i+1, g-v[i].g ) + v[i].p );
return x;
}
inline bool cmp ( obiect &a, obiect &b )
{
if ( a.p > b.p )
return 1;
else if ( a.p == b.p && a.g < b.g )
return 1;
return 0;
}
void read ( )
{
fin >> n >> g;
for ( int i = 1; i <= n; i++ )
fin >> v[i].g >> v[i].p;
}