Cod sursa(job #201889)

Utilizator mgntMarius B mgnt Data 4 august 2008 18:15:08
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#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 ;
}