Pagini recente » Cod sursa (job #26870) | Cod sursa (job #469699) | Cod sursa (job #992775) | Cod sursa (job #196885) | Cod sursa (job #1853454)
#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;
d[0] = 1;
for( i=0; i<n; i++ ){
fscanf( fin, "%d%d", &p, &cost );
for( j=last; j>=0; j-- ){
if( j+p >= pmin - 1 ) ///valorile sunt mai mari cu 1
costmin = mini( costmin, d[j] + cost );
else{
d[j+p] = maxi( 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;
}