Pagini recente » Cod sursa (job #1219970) | Cod sursa (job #1421613) | Cod sursa (job #3285165) | Cod sursa (job #934071) | Cod sursa (job #1469692)
#include <stdio.h>
#include <stdlib.h>
struct lista {
int c,e;
struct lista *u;
};
struct lista *prim=NULL;
int adauga(energie,cost) {
struct lista *z=(struct lista*)malloc(sizeof(struct lista));
if (z==NULL) return(0);
else {
z->e=energie; z->c=cost;
z->u=prim; prim=z;
return(1);
}
}
int sterge(struct lista *z) {
if (z==prim) {
prim=prim->u; free(z);
return(1);
}
else {
struct lista *t;
for (t=prim; t->u!=z && t!=NULL; t=t->u);
if (t==NULL) return(0);
else {
t->u=z->u; free(z);
return(1);
}
}
}
int main() {
int i,g,w,sum_e=0,sum_c=0;
FILE *f=fopen("energii.in","r");
if (f==NULL) {
printf("Eroare deschidere fisier.");
fflush(stdin); getchar();
}
else {
fscanf(f,"%d",&g); fscanf(f,"%d",&w);
for (i=0; i<g; i++) {
int tmp_e,tmp_c;
fscanf(f,"%d %d",&tmp_e,&tmp_c);
adauga(tmp_e,tmp_c);
sum_e+=tmp_e; sum_c+=tmp_c;
}
fclose(f);
f=fopen("energii.out","w");
if (sum_e<w) fprintf(f,"-1");
else {
int ok;
struct lista *t,*max;
do {
ok=0; max=NULL;
for (t=prim; t!=NULL; t=t->u)
if (sum_e-t->e>=w && (max==NULL || t->c>max->c))
max=t;
if (max!=NULL) {
sum_e-=max->e; sum_c-=max->c;
sterge(max); ok=1; }
} while (ok);
fprintf(f,"%d",sum_c);
}
fclose(f);
}
return(0);
}