Pagini recente » Cod sursa (job #724614) | Cod sursa (job #1377110) | Cod sursa (job #590979) | Cod sursa (job #387814) | Cod sursa (job #201889)
Cod sursa(job #201889)
#include <fstream>
using namespace std ;
int
main ( ) {
// maxn = 1,000 ( n := G )
// maxw = 5,000
// maxe = 10,000
// maxc = 10,000
enum { maxn = 1000 , maxe = 10000, maxw = 5000 } ;
int n ; // 1 <= n <= maxn
int w ; // 1 <= w <= maxw
int e [ maxn ] ; // 1 <= e [i] <= maxe , i=1,n
int c [ maxn ] ; // 1 <= c [i] <= maxc , i=1,n
ifstream oStreamIn ( "energii.in" ) ;
oStreamIn >> n >> w ;
int i , j , k , t ;
for ( i = 0 ; i < n ; i ++ ) {
oStreamIn >> e [i] >> c [i] ;
}
int const L = maxe + maxw ;
bool b [ 1 + L ] ;
int v [ 1 + L ] ;
for ( j = 0 ; j < L ; j ++ ) {
b [ j ] = false ;
}
b [0] = true ;
v [0] = 0 ;
for ( i = 0 ; i < n ; i ++ ) {
for ( j = L ; j >= 0 ; j -- ) {
k = j - e [i] ;
if ( ! b [j] ) {
if ( 0 <= k && b[k] ) {
v [j] = v[k] + c[i] ;
b [j] = true ;
}
} else {
if ( 0 <= k && b [k] ) {
t = v[k] + c[i] ;
if (v [j] > t ) {
v [j] = t ;
}
}
}
}
}
int x = - 1 ;
for ( j = w ; j <= L ; j ++ ) {
if ( b [j] ) {
if ( - 1 == x || x > v [j] ) {
x = v [j] ;
}
}
}
ofstream oStreamOut ( "energii.out" ) ;
oStreamOut << x << endl ;
return 0 ;
}