Cod sursa(job #48078)

Utilizator bvaliValentin Bora bvali Data 4 aprilie 2007 13:14:06
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>

short n, energii[1001], costuri[1001], energieNecesara;
long c[10000000];
FILE *fout = fopen("energii.out", "w");
void cit(){
    short register i;
    FILE *fin = fopen("energii.in", "r");
    fscanf(fin, "%hi", &n);
    fscanf(fin, "%hi", &energieNecesara);
    for(i=1; i<=n; i++)
	fscanf(fin, "%hi %hi", &energii[i], &costuri[i]);
    fclose(fin);
}
void solve(){
    long max = 0, i, j, min;
    c[0]=1;
    for(i=1; i<=n; i++){
	for(j=max; j>=0; j--)
	    if (c[j])
		if(c[j]+costuri[i] < c[j+energii[i]] || c[j+energii[i]] == 0)
		  c[j+energii[i]] = c[j]+costuri[i];
	    max += energii[i];
	    if (max>energieNecesara) max=energieNecesara;
    }
    min=100000;
    for(i=energieNecesara; i<=max; i++) 
	if (c[i] && c[i]<min) min=c[i];
    if (max<energieNecesara) fprintf(fout,"-1");
       else
	   fprintf(fout, "%li", min-1);
}
int main(){
    cit();
    solve();
    fclose(fout);
    return 0;
}