Pagini recente » Cod sursa (job #3147018) | Cod sursa (job #2386576) | Cod sursa (job #3151214) | Cod sursa (job #133694) | Cod sursa (job #2444804)
#include <iostream>
#define GMAX 1001
#define WMAX 10001
#define INFINIT 1000000000
using namespace std;
struct gen {
int e ;
int cst ;
};
struct sol {
char s [ GMAX + 1 ] ;
int pret ;
};
gen v [ GMAX + 1 ] ;
sol gr [ WMAX + 1 ] ;
int main() {
FILE *fin, *fout ;
fin = fopen ("energii.in", "r" ) ;
fout = fopen ("energii.out", "w" ) ;
int g, w, i, j, poz, minim ;
fscanf (fin, "%d%d", &g, &w ) ;
for (i = 0 ; i <= WMAX ; i++ )
gr[i].pret = INFINIT ;
for (i = 1 ; i <= g ; i++ ) {
fscanf (fin, "%d%d", &v[i].e, &v[i].cst ) ;
gr[v[i].e].pret = v[i].cst ;
gr[v[i].e].s[i] = 1 ;
}
for (i = 0 ; i <= WMAX ; i++ ) {
if (gr[i].pret != INFINIT ) {
for (j = 1 ; j <= g ; j++ ) {
if (i+v[j].e <= WMAX && gr[i].s[j] == 0 && gr[i+v[j].e].pret > gr[i].pret + v[j].cst ) {
gr[i+v[j].e] = gr[i] ;
gr[i+v[j].e].pret += v[j].cst ;
gr[i+v[j].e].s[j] = 1 ;
}
}
}
}
poz = 0 ;
minim = INFINIT ;
for (i = w ; i <= WMAX ; i++ )
if (gr[i].pret != INFINIT && gr[i].pret < minim ) {
minim = gr[i].pret ;
poz = i ;
}
if (poz == 0 )
fprintf (fout, "-1" ) ;
else {
fprintf (fout, "%d", gr[poz].pret ) ;
}
return 0;
}