Pagini recente » Arhiva de probleme | Cod sursa (job #3128545) | Cod sursa (job #83600) | Monitorul de evaluare | Cod sursa (job #2010944)
#include <stdio.h>
#include <stdlib.h>
int N,W,DP[1005][50005],S;
int inf = 1000000001;
void energii(){
scanf( "%d%d" , &N , &W );
for( int i = 0 ; i <= N ; i++ ){
for( int j = 1 ; j <= W ; j++ ){
DP[i][j] = inf;
}
}
for( int i = 1 ; i <= N ; i++ ){
int e , c ;
scanf( "%d%d" , &e , &c );
S = S + e ;
for( int j = 1 ; j <= W ; j++ ){
if( j > e ){
if( DP[i-1][j] < DP[i-1][j-e]+c ){
DP[i][j] = DP[i-1][j];
}else{
DP[i][j] = DP[i-1][j-e]+c;
}
}else{
if( DP[i-1][j] < c ){
DP[i][j] = DP[i-1][j];
}else{
DP[i][j] = c;
}
}
}
}
}
int main(){
freopen( "energii.in" , "r" , stdin );
freopen( "energii.out" , "w" , stdout );
energii();
if( S < W )
printf("-1");
else
printf( "%d" , DP[N][W] );
return 0;
}