Pagini recente » Cod sursa (job #1813195) | Borderou de evaluare (job #2632783) | Cod sursa (job #688888) | Cod sursa (job #586240) | Cod sursa (job #1193296)
#include <stdio.h>
#include <algorithm>
#include <iostream>
using namespace std;
FILE *f = fopen( "rucsac.in", "r" );
FILE *g = fopen( "rucsac.out", "w" );
const int MAX = 5000;
struct DepPro{
int a, p;
};
DepPro a[MAX];
int ok[MAX], p[MAX];
int n, s;
bool Comp( const DepPro& a1, const DepPro& a2 )
{
if ( a1.p > a2.p || ( a1.p == a2.p && a1.a < a2.a ) )
return true;
return false;
}
void Rucsac();
int main()
{
int i, j;
fscanf( f, "%d%d", &n, &s );
for ( i = 1; i <= n; i++ )
fscanf( f, "%d%d", &a[i].a, &a[i].p );
Rucsac();
fclose(f);
fclose(g);
return 0;
}
void Rucsac()
{
int i, j;
ok[0] = 1; p[0] = 0;
sort( a + 1, a + 1 + n, Comp );
for ( i = 1; i <= n; i++ )
for ( j = s - a[i].a; j >= 0; j-- )
if ( ok[j] && p[j + a[i].a] < p[j] + a[i].p )
{
ok[j + a[i].a] = 1;
p[j + a[i].a] = p[j] + a[i].p;
}
fprintf( g, "%d\n", p[s] );
}