Cod sursa(job #491521)
# include <cstdio>
# include <cstring>
int G, W, min = 0x3f3f3f3 ;
int best[5000] ;
int main ( void ) {
freopen ( "energii.in", "r", stdin ) ;
memset ( best, -1, sizeof ( best ) ) , best[0] = 0 ;
scanf ( "%d %d", &G, &W ) ;
for ( int i = 0, a, b ; i < G; ++i ) {
scanf ( "%d %d", &a, &b ) ;
for ( int j = W - 1; j >= 0; --j ) {
if ( best[j] != -1 ) {
if ( j + a < W ) {
if ( best[j] + b < best[j + a] || best[j + a] == -1 ) {
best[j + a] = best[j] + b ;
}
} else if ( best[j] + b < min ) {
min = best[j] + b ;
}
}
}
}
freopen ( "energii.out", "w", stdout ) ;
printf ( "%d", min == 0x3f3f3f3 ? -1 : min ) ;
}