Pagini recente » Cod sursa (job #1938843) | Istoria paginii utilizator/butasebi | Cod sursa (job #1575984) | Cod sursa (job #1523232) | Cod sursa (job #1853460)
#include <stdio.h>
#define nmax 5000
#define infinit 2000000000
int d[nmax]; ///d[i] vector de costuri, unde i e o putere
int maxi( int a, int b ){
return ( a>=b ) ? a : b;
}
int mini( int a, int b ){
return ( a<b ) ? a : b;
}
int main()
{
int n, pmin, p, cost, i, j, costmin, last;
FILE *fin, *fout;
fin = fopen( "energii.in", "r" );
fscanf( fin, "%d%d", &n, &pmin );
costmin = infinit;
last = 0;
for( i=1; i<pmin; i++ )
d[i] = infinit;
for( i=0; i<n; i++ ){
fscanf( fin, "%d%d", &p, &cost );
for( j=last; j>=0; j-- ){
if( j+p >= pmin )
costmin = mini( costmin, d[j] + cost );
else{
d[j+p] = mini( d[j+p], d[j] + cost ); ///daca noua
last = maxi( last, j+p ); ///ultima pozitie actualizata
}
}
}
fclose( fin );
fout = fopen( "energii.out", "w" );
( costmin < infinit ) ? fprintf( fout, "%d\n", costmin ) : fprintf( fout, "-1\n" );
fclose( fout );
return 0;
}