Cod sursa(job #48030)

Utilizator bvaliValentin Bora bvali Data 4 aprilie 2007 12:47:30
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 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;
    for(i=1; i<=n; i++){
	for(j=max; j>=0; j--)
	    if(c[j]+costuri[i] < c[j+energii[i]] || c[j+energii[i]] == 0 || (j==0 && costuri[i]<c[energii[i]])){
		c[j+energii[i]] = c[j]+costuri[i];
		max = j+energii[i];
	    }
    }
    for(i=energieNecesara; i<=max; i++)
	if(c[i]){
	    fprintf(fout, "%li", c[i]);
	    break;
	}
}
int main(){
    cit();
    solve();
    fclose(fout);
    return 0;
}