Pagini recente » Cod sursa (job #455328) | Cod sursa (job #3130417) | Cod sursa (job #2968196) | Cod sursa (job #961814) | Cod sursa (job #1746189)
#include <fstream>
using namespace std ;
ifstream f ("energii.in") ;
ofstream g ("energii.out") ;
int G , W , EG[1002] , CG[1002] , Cost1[5002] , Cost2[5002] ;
int main ()
{
f >> G >> W ;
for ( int i = 1 ; i <= G ; ++i )
f >> EG[i] >> CG[i] ;
//initializam initial costul minim de a obtine energia i cu 0 generatoare infinit
for ( int i = 1 ; i <= W ; ++i )
if ( EG[1] >= i )
Cost1[i] = CG[1] ;
else
Cost1[i] = 1e9 ;
for ( int i = 2 ; i <= G ; ++i )
{
for ( int j = W ; j >= 1 ; --j )
{
//dorim sa obtinem energia j , folosind primele i generatoare si sa avem cost minim
//avem de ales intre costul de a obtine energia j din primele i-1 elemente si
//costul de a obtine energia j-Eg[i] de catre primele i-1 elemente + CG[i] -costul necesar de a produce Eg[i] energie de catre al i-lea generator
if ( EG[i] < j )
Cost2[j] = min ( Cost1[j] , Cost1[j-EG[i]] + CG[i] ) ;
else
Cost2[j] = min ( Cost1[j] , CG[i] ) ;
}
for ( int j = 1 ; j <= W ; ++j )
Cost1[j] = Cost2[j] ;
}
if ( Cost1[W] != 1e9 )
g << Cost1[W] ;
else
g << "-1" ;
}